hdu 1879 继续通畅工程(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879
/************************************************************************/ /* hdu 继续畅通工程 最小生成树 题目大意:求连通这些村庄最少的建设公路费用 解题思路:最小生成树,有的路已修建完成,费用记为0, 计算剩下的这些村子建设路的费用最小值,找出一个最小生成树 */ /************************************************************************/ #include <stdio.h> #include <string.h> #include <algorithm> const int N = 101; int map[N][N]; int mark[N]; int i,j,n; int prim() { int sum = 0; int min,t = n,k; while(--t) { min = 100000; for (i = 2; i <= n; i++) { if(mark[i] != 1 && min > map[1][i]) { min = map[1][i]; k = i; } } sum += min; mark[k] = 1; for (i = 2; i <= n; i++) { if(mark[i] != 1 && map[k][i] < map[1][i]) map[1][i] = map[k][i]; } } return sum; } int main() { int x,y,fee,flag,num; while(scanf("%d",&n) && n != 0) { num = n*(n-1)/2; memset(map,0,sizeof(map)); for (i = 1; i <= num; i++) { scanf("%d%d%d%d",&x,&y,&fee,&flag); if(flag == 1)map[x][y] = map[y][x] = 0; else map[x][y] = map[y][x] = fee; } memset(mark,0,sizeof(mark)); printf("%d\n",prim()); } return 0; }
posted on 2013-08-10 09:29 NewPanderKing 阅读(235) 评论(0) 编辑 收藏 举报