hdu 1879 继续畅通工程

来源:互联网 发布:迅雷 linux 编辑:程序博客网 时间:2024/06/02 20:33

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879


YYing


/*   Kruskal;*/#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct all{    int u,v,w,vis;}e[10000];int p[1000],n,m;int cmp(all x,all y){    return x.w<y.w;}int find(int x){    return p[x]==x?p[x]:find(p[x]);}void join(int x,int y){    x=find(x);    y=find(y);    if(x!=y)    p[x]=y;}void kruskal(){    int i,ans=0;    sort(e+1,e+m+1,cmp);    for(i=1;i<=m;i++)    {        int x=find(e[i].u);        int y=find(e[i].v);        if(x!=y&&!e[i].vis)        {            p[x]=y;            ans+=e[i].w;        }    }   printf("%d\n",ans);}int main(){    while(scanf("%d",&n)&&n)    {        int i;        m=n*(n-1)/2;        for(i=1;i<=n;i++)           p[i]=i;        for(i=1;i<=m;i++)        {            scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].w,&e[i].vis);            if(e[i].vis==1)//先把已经联通的合在一起,免得到后面调用函数时,又把他计算一下            join(e[i].u,e[i].v);        }        kruskal();    }    return 0;}


原创粉丝点击