码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1233

时间:2014-12-21 09:10:28      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
 1 #include <iostream>
 2 #include <memory.h>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int MAX = 1<<20;
 7 const int N = 111;
 8 int mp[N][N];
 9 int lowcost[N];
10 int vis[N];
11 int n, ans;
12 
13 void prim()
14 {
15     int i,j,pos,Min;
16     for (i = 1;i <= n; ++ i)
17         lowcost[i] = mp[1][i];
18     vis[1] = 1;
19     for (i = 1;i <= n; ++ i)  {
20         Min = MAX;
21         for (j = 1;j <= n; ++ j) {
22             if (Min > lowcost[j] && !vis[j])
23             {
24                 pos = j;
25                 Min = lowcost[j];
26             }
27         }
28         vis[pos] = 1;
29         for (j = 1 ;j <= n; ++ j)
30             if (!vis[j] && mp[pos][j] < lowcost[j])
31                 lowcost[j] = mp[pos][j];
32     }
33     for (j = 1;j <= n;++ j)   //因为mp[1][1] = 0
34         ans += lowcost[j];
35 }
36 
37 void init()
38 {
39     memset(lowcost,0,sizeof(lowcost));
40     memset(vis,0,sizeof(vis));
41     for (int i  = 0;i <= n; ++ i)
42         for (int j = 0;j <= n;++ j) {
43         mp[i][j] = MAX;
44         if (i == j)
45             mp[i][j] = 0;
46     }
47 }
48 
49 
50 int main()
51 {
52     while (~scanf("%d",&n),n)
53     {
54         init();
55         int m = n*(n-1)/2;
56         for (int i = 0;i < m; ++ i)
57         {
58             int a,b,c;
59             scanf("%d%d%d",&a,&b,&c);           
60              if (mp[a][b] > c)
61                 mp[a][b] = mp[b][a] = c;
62         }
63         ans = 0;
64         prim();
65         cout << ans << endl;
66     }
67     return 0;
68 }
代码君

裸体 不解释

hdu1233

标签:

原文地址:http://www.cnblogs.com/usedrosee/p/4176177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!