hdu1233

 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 }

代码君

裸体 不解释

时间: 2024-10-13 18:26:37

hdu1233的相关文章

HDU1233 - 还是畅通工程 最小生成树,用了三种姿势AC

HDU1233 - 还是畅通工程 : http://acm.hdu.edu.cn/showproblem.php?pid=1233 用了三种姿势AC这题之后, 感觉对最小生成树的理解又更深了一层. 嗯, 让你们看看我用的是哪三种姿势 方法 1 : #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const in

HDU1233 还是畅通工程 【最小生成树Prim】

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

【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

HDU1233 还是畅通工程【Prim】

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

hdu1233+最小生成树

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

hdu1233 还是畅通工程 最小生成树

给出修建边的边权,求连通所有点的最小花费 最小生成树裸题 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 6 struct seg{ 7 int a,b,l; 8 bool operator <(const seg a)const{ 9 return l<a.l; 10 } 11 }s[5000]; 12 13 int n,fa[1

hdu1233 还是畅通工程 基础最小生成树

1 //克鲁斯卡尔 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 const int maxn = 10005; 6 struct node 7 { 8 int begin, end, len; 9 }cun[maxn]; 10 int n, fa[maxn], ans, m; 11 12 bool cmp(node a, node b) 13 { 14 return a.len<b.l

HDU1233——还是通常工程(最小生成树,并查集)

http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:就是裸的最小生成树.这里用的是kruskal 使用的是并查集,将按距离排序的边,分别把点加到集合里.节点存在在集合里说明是环路. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,s,k; int par[10

还是畅通工程[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某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可