热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

kruskal_并查集_代码模板_hdu1232

kruskal代码模板inputabv1v2w1v2v3w2a_thenumberofverteicesb_thenumberofedgesv1_verteiceswi

kruskal代码模板

input

a b
v1 v2 w1
v2 v3 w2
...

a_the number of verteices

b_the number of edges

v1_verteices

wi_the weight of each edge

1 #include
2 #include<string>
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include<set>
12
13 #define MAX 100005
14 #define MOD 1000003
15 #define inf 100000000
16 #define eps 1e-9
17 #define pi acos(-1.0)
18 #define LL long long
19 #define I64 __int64
20 #define max(a, b) ((a) > (b) ? (a) : (b))
21 #define min(a, b) ((a) <(b) ? (a) : (b))
22
23 using namespace std;
24
25 struct edge {
26 int v1, v2, w;
27 };
28
29 int edge_num, vertex_num;
30 edge volume_e[30];
31 int father[30];
32
33 int cmp(edge a, edge b) {
34 return a.w < b.w;
35 }
36
37 int find(int x) {
38 int root &#61; x;
39 if(father[root] !&#61; root)
40 root &#61; father[root];
41 return root;
42 }
43
44 int judge(edge e) {
45 if(find(e.v1) !&#61; find(e.v2))
46 return 1;
47 return 0;
48
49 }
50 int main()
51 {
52 freopen("in.txt", "r", stdin);
53 cin >> edge_num >> vertex_num;// the number of edge and vertex
54 // v1, v2, weight
55 for(int i &#61; 0; i )
56 scanf("%d %d %d", &volume_e[i].v1, &volume_e[i].v2, &volume_e[i].w);
57
58 // initial
59 for(int i &#61; 1; i <&#61; vertex_num; i&#43;&#43;) father[i] &#61; i;
60
61 sort(volume_e, volume_e&#43;edge_num, cmp);
62
63 int sum &#61; 0;
64 for (int i &#61; 0;i )
65 {
66 int x &#61; find (volume_e[i].v1);
67 int y &#61; find (volume_e[i].v2);
68 if (x !&#61; y)
69 {
70 sum &#43;&#61; volume_e[i].w;
71 father[x] &#61; y;
72 }
73 }
74 printf ("%d\n", sum);
75 }
76
77 /*
78 5 5
79 1 2 2
80 2 3 3
81 1 4 1
82 3 4 2
83 4 5 4
84
85 */

hdu1232

1 using namespace std;
2
3 int add;
4 int f[100010];
5 int n, m;
6
7 int findset(int x)
8 {
9 int set &#61; x;
10 while(f[set] !&#61; set)
11 {
12 set &#61; f[set];
13 }
14 return set;
15 }
16
17 void merge(int a, int b)
18 {
19 int x &#61; findset(a);
20 int y &#61; findset(b);
21 if(x !&#61; y)
22 f[x] &#61; y;
23 }
24
25 int main()
26 {
27 freopen("in.txt", "r", stdin);
28 while(scanf("%d %d", &n, &m) &#61;&#61; 2)
29 {
30 add &#61; 0;
31 if(n &#61;&#61; 0)
32 break;
33 else if(m &#61;&#61; 0)
34 {
35 add &#61; n - 1;
36 printf("%d\n", add);
37 }
38 else
39 {
40 for(int i &#61; 1; i <&#61; n; i&#43;&#43;) f[i] &#61; i;
41
42 for(int i &#61; 0; i )
43 {
44 int a, b;
45 scanf("%d %d", &a, &b);
46 merge(a, b);
47 }
48
49 for(int i &#61; 1; i <&#61; n; i&#43;&#43;)
50 if(f[i] &#61;&#61; i)
51 add&#43;&#43;;
52 add--;
53 printf("%d\n", add);
54 }
55 //
56 memset(f, 0, sizeof(f));
57 }
58 }
59
60 /*
61 4 2
62 1 3
63 4 3
64 3 3
65 1 2
66 1 3
67 2 3
68 5 2
69 1 2
70 3 5
71 999 0
72 0
73
74 */

 

 

转:https://www.cnblogs.com/shichuanwang/archive/2012/08/26/2657418.html



推荐阅读
author-avatar
漂浮胖_大卍宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有