kruskal

 1 struct node {
 2     int u, v, w;
 3 
 4     bool operator<(const node &b) const {
 5         return w < b.w;
 6     }
 7 }a[M];
 8 
 9 int find(int x) {
10     if (x == f[x]) {
11         return x;
12     }
13     return f[x] = find(f[x]);
14 }
15 
16 void union1(int x,int y) {
17     f[x] = y;
18 }
19 
20 int main() {
21     scanf("%d%d", &n, &m);
22     for (int i = 1; i <= n; i++) {
23         f[i] = i;
24     }
25     for (int i = 1; i <= m; i++) {
26         scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].w);
27     }
28     sort(a + 1, a + m + 1);
29     for (int i = 1; i <= m; i++) {
30         int x = find(a[i].u), y = find(a[i].v);
31         if (x != y) {
32             union1(x, y);
33             k++;
34             ans += a[i].w;
35         }
36         if (k == n - 1) {
37             break;
38         }
39     }
40     printf("%d\n", ans);
41 }

 

posted @ 2019-07-15 22:06  Snow_in_winer  阅读(140)  评论(0编辑  收藏  举报