HDU 1879 继续畅通工程

来源:互联网 发布:淘宝收复女短裤 编辑:程序博客网 时间:2024/06/05 17:27
/*http://acm.hdu.edu.cn/showproblem.php?pid=1879*/#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct edge{int a,b,c,f; //a,b 是边的两个顶点 c 是费用 f 表示是否建路 }edge;edge tree[110*110/2];int pa[110];int n,m,sum;int cmp(const void*a, const void*b){return ((edge*)a)->c-((edge*)b)->c;}int find(int x){int px=pa[x];while(px!=x){x=px;px=pa[x];}return px;}void merge(int x, int y){int px=find(x);int py=find(y);if(px!=py)pa[px] = py;}void kruskal(){int i;for(i=0; i<m; i++){if(find(tree[i].a)!=find(tree[i].b)){merge(tree[i].a,tree[i].b);tree[i].f=1;sum+=tree[i].c;}}} int main(){freopen("input.txt","r",stdin);while(scanf("%d",&n)&&n){m = n*(n-1)/2;sum=0;int i;memset(tree,0,sizeof(tree));for(i=1; i<=n; i++) pa[i]=i;for(i=0; i<m; i++){scanf("%d %d %d %d",&tree[i].a,&tree[i].b,&tree[i].c,&tree[i].f);if(tree[i].f) tree[i].c=0; //预处理 使已经建路的 费用为0}qsort(tree,m,sizeof(tree[0]),cmp);kruskal();printf("%d\n",sum);}return 0;}

原创粉丝点击