cf1184E1
题意简述:给出n个点m条边的无向图,你可以修改第一条边的权值,使得他可能会处于一棵最小生成树中,问你第一条的权值最大(不超过1e9)可以改为多少
题解:不去使用第一条边去跑最小生成树,然后在跑的过程中,有一条边连接的两个联通分量与第一条连接是一样的,那么答案就是这条边的权值
如果最后没办法联通,说明第一条边是桥,答案是1e9
int fa[maxn];
int Find(int x){
return x==fa[x]?x:fa[x]=Find(fa[x]);
}
int main(){
int n,m;
cin>>n>>m;
vector<pair<int,pair<int,int>>> edge(m);
for(int i=0;i<m;i++){
cin>>edge[i].se.fi>>edge[i].se.se>>edge[i].fi;
}
sort(edge.begin()+1,edge.end());
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<edge.size();i++){
int x=edge[i].se.fi,y=edge[i].se.se;
int px=Find(x),py=Find(y);
if(px!=py){
int p1=Find(edge[0].se.fi),p2=Find(edge[0].se.se);
if(p1==px&&p2==py) {
cout<<edge[i].fi<<endl;return 0;
}
if(p1==py&&p2==px) {
cout<<edge[i].fi<<endl;return 0;
}
fa[px]=py;
}
}
cout<<(int)1e9<<endl;
}
浙公网安备 33010602011771号