求助,5个点不知为何RE
查看原帖
求助,5个点不知为何RE
476608
如虎添翼楼主2022/7/6 20:02
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct wires {int a, b, cost;};
int n, p[maxn], idx, ans, temp; wires wire[maxn];
int find(int x) {
	if (p[x] != x) p[x] = find(p[x]);
	return p[x];
} // 查找祖先+路径压缩
bool cmp(wires s, wires t) {return s.cost < t.cost;}
// sort排序的cmp函数
int main() {
	cin >> n;
	for (int i = 1; i <= maxn; i ++)
		p[i] = i;
	// 初始化并查集
	for (int i = 1; i <= n; i ++)
		for (int j = 1; j <= n; j ++)
			cin >> temp;
			if (j < i) {
				cin >> wire[++ idx].cost;
				wire[idx].a = i; wire[idx].b = j;
			}
	// 输入
	sort(wire + 1, wire + idx + 1, cmp); // 排序
	for (int i = 1; i <= idx; i ++)
		if (find(wire[i].a) != find(wire[i].b)) {
			ans += wire[i].cost;
			p[find(wire[i].a)] = find(wire[i].b);
			// 挑便宜的先来,如果两个元素不再同一个集合中,就建立一条边
		}
	cout << ans;
	return 0;
}
2022/7/6 20:02
加载中...