HDU(1087)继续畅通工程

来源:互联网 发布:iphone桌面软件管理 编辑:程序博客网 时间:2024/06/09 23:56
这题还是最小生成树 ==已经修建的道路的权值位0,然后再用克鲁斯卡尔算法

#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;const int maxn=2000;int p[maxn];struct node{    int u,v,w;};bool cmp(node a,node b){    return a.w<b.w;}int find(int x){    return p[x]==x? x : find(p[x]);}node a[maxn*maxn];int main(){    int n,m;    while(scanf("%d",&n)!=EOF&&n)    {        for(int i=0;i<=n;i++)        p[i]=i;        m=n*(n-1)/2;        int t;        for(int i=0;i<m;i++)        {            scanf("%d%d%d%d",&a[i].u,&a[i].v,&a[i].w,&t);            if(t)            a[i].w=0;        }        sort(a,a+m,cmp);        int ans=0;        for(int i=0;i<m;i++)        {            int fx=find(a[i].u);            int fy=find(a[i].v);            if(fx!=fy)            {                ans+=a[i].w;                p[fx]=fy;             }        }        printf("%d\n",ans);    }    return 0;} 

 

0 0