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 }