int cmp(const int i,const int j){
return w[i] < w[j];
}
int find(int x){
return x == pre[x] ? x : pre[x] = find(pre[x]);
}
int join(int x,int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
pre[fy] = fx;
return 1;
}
return 0;
}
int Kruskal(int n,int m){
for(int i = 1; i <= n; i++){
pre[i] = i;
}
for(int i = 0; i < m; i++){
r[i] = i;
}
sort(r,r + m,cmp);
int ans = 0;
int cnt = 0;
for(int i = 0; i < m; i++){
int e = r[i];
if(join(u[e],v[e])){
ans += w[e];
cnt++;
}
if(cnt == n - 1){
break;
}
}
return ans;
}
最小生成树Kruskal算法模板
最新推荐文章于 2022-02-28 14:53:46 发布