int cmp(const int i,const int j){ return w[i] < w[j]; } int find(int x){ return x == pre[x] ? x : pre[x] = find(pre[x]); } int join(int x,int y){ int fx = find(x); int fy = find(y); if(fx != fy){ pre[fy] = fx; return 1; } return 0; } int Kruskal(int n,int m){ for(int i = 1; i <= n; i++){ pre[i] = i; } for(int i = 0; i < m; i++){ r[i] = i; } sort(r,r + m,cmp); int ans = 0; int cnt = 0; for(int i = 0; i < m; i++){ int e = r[i]; if(join(u[e],v[e])){ ans += w[e]; cnt++; } if(cnt == n - 1){ break; } } return ans; }
最小生成树Kruskal算法模板
猜你喜欢
转载自blog.csdn.net/GYH0730/article/details/79944492
今日推荐
周排行