CCF CSP201812-4数据中心
最小生成树克鲁斯卡尔模板题
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010;
struct Node{
int u,v,dis;
}node[maxn];
bool cmp(Node a, Node b){
return a.dis < b.dis;
}
int father[maxn*5];
int f(int x){
int a = x;
while(father[x]!=x){
x = father[x];
}
//压缩路径
while(father[a]!=a){
int z = a;
a = father[a];
father[z] = x;
}
return x;
}
int main(){
int n,m,root,num = 0,ans = 0;
cin>>n>>m>>root;
for(int i = 1; i <= n; i++){
father[i] = i;
}
for(int i = 0; i < m; i++){
cin>>node[i].u>>node[i].v>>node[i].dis;
}
sort(node,node+m,cmp);
for(int i = 0; i < m; i++){
int fa = f(node[i].u);
int fb = f(node[i].v);
if(fa != fb){
ans =max(ans,node[i].dis);
father[fa] = fb;
num++;
if(num == n-1) break;
}
}
cout<<ans<<endl;
return 0;
}