HDU ACM 1233 还是畅通工程(MST)

还是畅通工程

Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16469Accepted Submission(s): 7422

Problem Description

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,香港服务器,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,网站空间,村庄从1到N编号。当N为0时,香港虚拟主机,输入结束,该用例不被处理。

Output

对每个测试用例,在1行里输出最小的公路总长度。

Sample Input

3

1 2 1

1 3 2

2 3 4

4

1 2 1

1 3 4

1 41

2 3 3

2 4 2

3 4 5

0

Sample Output

35

Hint

Hint

Huge input, scanf is recommended.

Source

浙大计算机研究生复试上机考试-2006年

#include<stdio.h>#include<string.h>#include<math.h>int path[102][102];int flag[102];int closedge[102];int max;int cnt;int CreatMST(int n){int i, j, x, k;flag[0] = 1;for(i=1; i<n; ++i)closedge[i] = path[0][i];for(i=1; i<n; ++i){k = max, x = 1;for(j=1; j<n; ++j)if(!flag[j] && closedge[j] < k)x = j, k = closedge[j];flag[x] = 1;cnt += k;for(j=1; j<n; ++j)if(!flag[j] && closedge[j] > path[x][j])closedge[j] = path[x][j];}return cnt;}int main(){int i, j, k, t, x, y, n, m;, &n) != EOF && n){max = 0;cnt = 0;memset(flag, 0, sizeof(flag));memset(closedge, 0, sizeof(closedge));memset(path, 0, sizeof(int)*102*102);for(i=0; i<(n*(n-1))/2; ++i)// 计算N*(N+1)条路径的权重 {scanf(, &x, &y, &m);path[x-1][y-1] = path[y-1][x-1] = m;if(max < m) max = m;}max++;for(i=0; i<n; ++i)path[i][i] = max;printf(, CreatMST(n));}return 0;}

解题报告:

还是畅通工程,那么也还是最小生成树

仿佛一支飘荡在水上的华丽咏叹调。

HDU ACM 1233 还是畅通工程(MST)

相关文章:

你感兴趣的文章:

标签云: