还是畅通工程(MST)

还是畅通工程

Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status

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 4 1
2 3 3
2 4 2
3 4 5
0

Sample Output

3
5

Hint

Hint  Huge input, scanf is recommended.
        

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 #define maxn 0x3fff
 5 using namespace std;
 6 int d[110] , map[110][110] , v[110] ;//d[i]用来存放(i - 1) - th ~ i - th (point) 的权值 , v[i] 中0表示没选过 , 1表示选过
 7 int n , m ;
 8
 9 int prim (int start )
10 {
11     int mm , x ;
12     for (int i = 1 ; i <= n ; i++)
13         d[i] = i == start ? 0 : maxn ; //给 起始点 和 非起始点 涂色
14     for (int i = 1 ; i <= n ; i++) {
15         mm = maxn ;
16         for (int j = 1 ; j <= n ; j++) { //找出权值最小的边
17             if ( !v[j] && d[j] < mm ) {
18                 mm = d[j] ;
19                 x = j ;
20             }
21         }
22         v[x] = 1 ;
23         for (int j = 1 ; j <= n ; j++ )  {
24              if ( !v[j] && d[j] > map[x][j] && map[x][j] != maxn )
25                 d[j] = map[x][j] ;
26         }
27     }
28     int tmp = 0 ;
29     for (int i = 1 ; i <= n ; i++)
30         tmp += d[i] ;
31     return tmp ;
32 }
33
34 int main ()
35 {
36    // freopen ("a.txt" , "r" , stdin ) ;
37     int val ;
38     int a , b ;
39     int res ;
40     while ( cin >> n , n) {
41         m = n * (n - 1) >> 1 ;
42         memset (map , 0x3f , sizeof(map) ) ;
43         memset (v , 0 , sizeof(v) ) ;
44          for(int i = 1 ; i <= m ; i++ )
45         {
46             scanf ("%d%d%d", &a , &b , &val );
47             if( val < map[a][b] )
48             {
49                 map[a][b] = val;
50                 map[b][a] = val;
51             }
52         }
53         res = prim(1) ;
54         cout << res << endl ;
55     }
56     return 0 ;
57 }

200 ms

时间: 2024-11-03 22:56:37

还是畅通工程(MST)的相关文章

【裸MST:prim+邻接矩阵 / Kruskal+邻接表】hdu 1233 还是畅通工程

Source : hdu 1233 还是畅通工程 http://acm.hdu.edu.cn/showproblem.php?pid=1233 Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试用例.每个测试用例的第1行给出村庄

【权值初始化+有条件的MST】hdu 1875 畅通工程再续

Source : hdu 1875 畅通工程再续 http://acm.hdu.edu.cn/showproblem.php?pid=1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2

【HDU1875】畅通工程再续(MST基础题)

更改成实形数即可.第一次敲完直接交,CE了一次.晕. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdio> 5 #include <cctype> 6 #include <cmath> 7 #include <algorithm> 8 #include <numeric> 9 10 #define t

【HDU1879】继续畅通工程(MST基础题)

真心大水题...不多说. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cctype> 6 #include <cmath> 7 #include <algorithm> 8 #include <numeric> 9 10 #define typec int 11 u

【HDU1233】还是畅通工程(MST基础题)

无坑,裸题.直接敲就恩那个AC. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cmath> 5 #include <cctype> 6 #include <algorithm> 7 #include <numeric> 8 9 #define typec int 10 using namespace std; 11 1

最小生成树(MST) prime() 算法 kruskal()算法 A - 还是畅通工程

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离. 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. Input 测试输入包含若干测试用例. 每个测试用例的第1行给出村庄数目N ( < 100 ):随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离.为简单起见,村庄从1到N编号. 当N为0

畅通工程再续(MST)

畅通工程再续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建

还是畅通工程[HDU1233]

还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 41897 Accepted Submission(s): 19126 Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可

ACM-最小生成树之继续畅通工程——hdu1879

***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12918    Accepted Submis