求解最小生成树——kruskal算法模板

来源:互联网 发布:淘宝网首页布局介绍 编辑:程序博客网 时间:2024/05/01 11:20
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;}


原创粉丝点击