main
黄海 2 years ago
parent ae40ca4f4d
commit a8151908a6

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

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

@ -104,7 +104,7 @@ int find(int x) {
} }
// Kruskal算法 // Kruskal算法
int kruskal() { void kruskal() {
// 1、按边权由小到大排序 // 1、按边权由小到大排序
sort(edge, edge + m); sort(edge, edge + m);
// 2、并查集初始化 // 2、并查集初始化
@ -117,8 +117,7 @@ int kruskal() {
p[a] = b, res += c, cnt++; // cnt是指已经连接上边的数量 p[a] = b, res += c, cnt++; // cnt是指已经连接上边的数量
} }
// 4、特判是不是不连通 // 4、特判是不是不连通
if (cnt < n - 1) return INF; if (cnt < n - 1) res = INF;
return res;
} }
int main() { int main() {
@ -128,11 +127,11 @@ int main() {
cin >> a >> b >> c; cin >> a >> b >> c;
edge[i] = {a, b, c}; edge[i] = {a, b, c};
} }
int t = kruskal(); kruskal();
if (t == INF) if (res == INF)
puts("impossible"); puts("impossible");
else else
printf("%d\n", t); printf("%d\n", res);
return 0; return 0;
} }
``` ```

Loading…
Cancel
Save