int tree[N];
struct edge{
int u,v;
int w;
}E[maxn];
bool cmp(edge a,edge b){
return a.w<b.w;
}
int findRoot(int x){
if(tree[x]==-1) return x;
else{
int tmp=findRoot(tree[x]);
tree[x]=tmp;
return tmp;
}
}
int kruskal(int n,int m){
int ans=0,num=0;
for(int i=1;i<=n;i++) tree[i]=-1;
sort(E,E+m,cmp);
for(int i=0;i<m;i++){
int a=findRoot(E[i].u);
int b=findRoot(E[i].v);
if(a!=b){
tree[a]=b;
ans+=E[i].w;
num++;
if(num==n-1) break;
}
}
if(num!=n-1) return -1;
else return ans;
}
求解最小生成树——kruskal算法模板
最新推荐文章于 2023-12-29 16:52:05 发布