QwQ Kruskal全WA求条(玄关)
  • 板块P2820 局域网
  • 楼主slch
  • 当前回复6
  • 已保存回复7
  • 发布时间2025/7/22 16:13
  • 上次更新2025/7/22 20:13:21
查看原帖
QwQ Kruskal全WA求条(玄关)
1384733
slch楼主2025/7/22 16:13

我的评测记录

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5 + 5;
struct edge {
	int p1, p2;
	int weight;
	
	friend istream& operator>>(istream& is, edge& e) {
		is >> e.p1 >> e.p2 >> e.weight;
		return is;
	}
};
bool cmp(edge a, edge b) {
	return a.weight < b.weight;
}

edge arr[N];
int prt[N];
int n, m;

int root(int u) {
	if (prt[u] == u)
		return prt[u];
	prt[u] = root(prt[u]);
	return prt[u];
}

bool merge(int u, int v) {
	int r1 = root(u), r2 = root(v);
	if (r1 == r2) return false;
	prt[r1] = r2;
	return true;
}

bool kruskal(long long& sum) {
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		if (cnt == n - 1)
			return true;
		if (merge(arr[i].p1, arr[i].p2)) {
			sum += arr[i].weight;
			cnt++;
		}
	}
	return false;
}

signed main() {
	cin >> n >> m;
	long long sum1 = 0;
	for (int i = 1; i <= m; i++) {
		cin >> arr[i];
	}
	for (int i = 1; i <= n; i++) {
		prt[i] = i;
		sum1 += arr[i].weight;
	}
	sort(arr + 1, arr + n + 1, cmp);
	
	long long sum = 0;
	if (kruskal(sum)) {
		cout << sum1 - sum << endl;
	}
	
	return 0;
}

样例过了但全WA QwQ

2025/7/22 16:13
加载中...