社区讨论

能过案例,测评全错,呜呜呜

P3366【模板】最小生成树参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhjah5gh
此快照首次捕获于
2025/11/03 23:22
4 个月前
此快照最后确认于
2025/11/03 23:22
4 个月前
查看原帖
代码按照模版写的,能过案例,但是测评全错我不理解 本人新手小白,求大神调谢谢
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 200005, INF = 0x3f;
int e[N], ne[N], h[N], w[N], idx;
int st[N], dis[N];

void add(int a, int b, int c) {
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx;
	w[idx] = c;
	idx++;
}

int n, m;

long long prim() {
	memset(dis, INF, sizeof dis);
	long long ans = 0;
	for (int i = 0; i < n; i++) {
		int t = -1;
		for (int j = 1; j <= n; j++) {
			if (!st[j] && (t == -1 || dis[t] > dis[j])) t = j;
		}
		if (i && dis[t] == INF) return INF;
		if (i) ans += dis[t];
		st[t] = 1;
		for (int j = h[t]; j != -1; j = ne[j]) {
			int p = e[j];
			dis[p] = min(dis[p], w[j]);
		}
	}
	return ans;
}

int main() {
	ios::sync_with_stdio(0);
	std::cin.tie(0);
	cin >> n >> m;
	memset(h, -1, sizeof h);
	for (int i = 0; i < m; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		add(a, b, c);
	}
	long long ans = prim(); 
	if (ans == INF) cout << "orz";
	else cout << ans;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...