|
|
|
@ -113,7 +113,7 @@ int res; // 最小生成树的权值和
|
|
|
|
|
int cnt; // 最小生成树的结点数
|
|
|
|
|
|
|
|
|
|
// Kruskal算法
|
|
|
|
|
int kruskal() {
|
|
|
|
|
void kruskal() {
|
|
|
|
|
// 1、按边权由小到大排序
|
|
|
|
|
sort(edge, edge + m);
|
|
|
|
|
// 2、并查集初始化
|
|
|
|
@ -126,8 +126,7 @@ int kruskal() {
|
|
|
|
|
p[a] = b, res += c, cnt++; // cnt是指已经连接上边的数量
|
|
|
|
|
}
|
|
|
|
|
// 4、特判是不是不连通
|
|
|
|
|
if (cnt < n - 1) return INF;
|
|
|
|
|
return res;
|
|
|
|
|
if (cnt < n - 1) res = INF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
@ -139,8 +138,8 @@ int main() {
|
|
|
|
|
cin >> c;
|
|
|
|
|
edge[m++] = {i, j, c}; // 加入当前的边
|
|
|
|
|
}
|
|
|
|
|
int t = kruskal();
|
|
|
|
|
cout << t << endl;
|
|
|
|
|
kruskal();
|
|
|
|
|
cout << res << endl;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|