标签:style blog http 2014 io for
这个题的路分为已修和未修,因此只需将已修的路的费用改为0,就转化成了一般的最小生成树的题了
#include<cstdio> #include<algorithm> using namespace std; int f[105],n,m; struct stu { int a,b,c; }t[5500]; int cmp(struct stu x,struct stu y) { return x.c<y.c; } int find(int x) { if(x!=f[x]) f[x]=find(f[x]); return f[x]; } int krus() { int i,k=0,s=0,x,y; for(i=1;i<=m;i++){ x=find(t[i].a); y=find(t[i].b); if(x!=y){ s+=t[i].c; k++; if(k==n-1) break; f[x]=y; } } return s; } int main() { int i,s,z; while(scanf("%d",&n)!=EOF){ if(n==0) break; m=n*(n-1)/2; for(i=1;i<=m;i++){ scanf("%d%d%d%d",&t[i].a,&t[i].b,&t[i].c,&z); if(z==1) //将已修的路的费用变为0 t[i].c=0; } for(i=1;i<=n;i++) f[i]=i; sort(t+1,t+1+m,cmp); s=krus(); printf("%d\n",s); } return 0; }
hdu 1879 继续畅通工程,布布扣,bubuko.com
标签:style blog http 2014 io for
原文地址:http://blog.csdn.net/acm_code/article/details/37969113