Kruskal HDOJ 1863 畅通工程

题目传送门

 1 /*
 2     此题为:HDOJ 1233 + HDOJ 1232
 3 */
 4 #include <cstdio>
 5 #include <algorithm>
 6 #include <cstring>
 7 #include <cmath>
 8 using namespace std;
 9
10 const int MAX_N = 100 + 10;
11 int pre[MAX_N];
12 int tot;
13 int sum;
14 struct NODE
15 {
16     int x, y;
17     int len;
18 }node[MAX_N];
19
20 int find(int root)
21 {
22     int son, tmp;
23     son = root;
24
25     while (root != pre[root])
26     {
27         root = pre[root];
28     }
29     while (son != root)
30     {
31         tmp = pre[son];
32         pre[son] = root;
33         son = tmp;
34     }
35
36     return root;
37 }
38
39 bool cmp(NODE a, NODE b)
40 {
41     return a.len < b.len;
42 }
43
44 int main(void)        //HDOJ 1863 畅通工程
45 {
46     //freopen ("inC.txt", "r", stdin);
47     int n, m;        //n路, m村庄
48
49     while (~scanf ("%d%d", &n, &m) && n)
50     {
51         tot = m - 1;
52         for (int i=1; i<=m; ++i)
53         {
54             pre[i] = i;
55         }
56         for (int i=1; i<=n; ++i)
57         {
58             scanf ("%d%d%d", &node[i].x, &node[i].y, &node[i].len);
59         }
60         sort (node+1, node+1+n, cmp);
61         sum = 0;
62         for (int i=1; i<=n; ++i)
63         {
64             int a, b;
65             a = find (node[i].x);
66             b = find (node[i].y);
67             if (a != b)
68             {
69                 pre[a] = b;
70                 sum += node[i].len;
71                 --tot;
72             }
73         }
74         if (tot == 0)
75             printf ("%d\n", sum);
76         else
77             puts ("?");
78     }
79 }
时间: 2024-12-19 00:07:44

Kruskal HDOJ 1863 畅通工程的相关文章

hdoj 1863 畅通工程 【最小生成树】+【kruskal】

题意:... 难点:如何判断是不是信息不全:在输入的时候建立并查集,之后判断有几个节点就可以了,剩下的就是kruskal算法. 代码: #include<stdio.h> #include<string.h> #include<algorithm> #define MAXN 105 #define INF 0x3f3f3f3f using std::sort; struct node{ int from; int to; int w; }edges[MAXN*MAXN]

hdoj 1863 畅通工程

并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19824    Accepted Submission(s): 8449 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计

hdoj 1863 畅通工程 【最小生成树 prim 算法】

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21522    Accepted Submission(s): 9278 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

HDU 1863 畅通工程 (最小生成树)

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16937    Accepted Submission(s): 7099 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设

HDU 1863 畅通工程 (最小生成树)

Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本.现请你编写程序,计算出全省畅通需要的最低成本. Input 测试输入包含若干测试用例.每个测试用例的第1行给出评估的道路条数 N.村庄数目M ( < 100 ):随后的 N 行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间

并查集 HDOJ 1232 畅通工程

题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 using namespace std; 11 12 const int MAX_N = 1000 + 10; 13 in

HDOJ 1874 畅通工程续 【dijkstra】

题意:... 策略:最简单的求最短路径. 代码: #include<stdio.h> #include<string.h> #define MAXN 1005 #define INF 0x3f3f3f3f int di[MAXN], vis[MAXN], n, m; int map[MAXN][MAXN]; void dijkstra(int v) { int i, j; memset(vis, 0, sizeof(vis)); di[v] = 0; vis[v] = 1; for

hdu 1863 畅通工程 (并查集+最小生成树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 17593    Accepted Submission(s): 7417 Problem Description 省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交

hdu 1863 畅通工程 最小生成树模板入门题 prim+kruskal两种算法AC。

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18866    Accepted Submission(s): 8012 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出