1 int n; 2 int p[MAXN],r[MAXN],u[MAXN],v[MAXN],w[MAXN]; 3 int cmp(const int i,const int j) { 4 return w[i] < w[j]; 5 } 6 int find(int x) { 7 return p[x] == x ? x : p[x] = find(p[x]); 8 } 9 int kruskal() { 10 int ans = 0; 11 for(int i = 0;i < n;i ++) p[i] = i; 12 for(int i = 0;i < n;i ++) r[i] = i; 13 sort(r,r + n,cmp); 14 for(int i = 0;i < n;i ++) { 15 int e = r[i]; 16 int x = find(u[e]); 17 int y = find(v[e]); 18 if(x != y) { 19 ans = max(ans,w[e]); 20 p[x] = y; 21 } 22 } 23 return ans; 24 }
原文:http://www.cnblogs.com/mitrenick/p/4370048.html