Kruskal

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define INF 0x3f3f3f3f
 4 #define M(a, b) memset(a, b, sizeof(a))
 5 const int N = 1e3 + 10, maxn = 1e4 + 10;
 6 int p[N], n, m;
 7 struct Edge {
 8     int u, v, w;
 9     bool operator < (const Edge rhs) const {
10         return w < rhs.w;
11     }
12 }e[maxn];
13 
14 int find(int u) {return u == p[u] ? u : find(p[u]);};
15 
16 int Kruskal() {
17     int ans = 0;
18     for (int i = 0; i < n; ++i) p[i] = i;
19     sort(e, e+m);
20     for (int i = 0; i < m; ++i) {
21         int u = find(e[i].u), v = find(e[i].v);
22         if (u != v) {
23             p[v] = u;
24             ans += e[i].w;
25         }
26     }
27     return ans;
28 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-11-25
  • 2022-02-12
  • 2021-11-14
  • 2021-08-07
猜你喜欢
  • 2022-12-23
  • 2021-11-16
  • 2022-12-23
  • 2021-05-15
  • 2021-06-24
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案