30pts kruskal求助!
  • 板块P1396 营救
  • 楼主Francium_
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/10/8 08:46
  • 上次更新2023/11/2 14:57:52
查看原帖
30pts kruskal求助!
762086
Francium_楼主2023/10/8 08:46

30pts,只有#1#2#3A了,其他全WA

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 10;
long long n, m, s, t, f[N], ans, M;

struct edges {
	long long u, v, w;
} edge[N];

bool cmp(edges x, edges y) {
	return x.w < y.w;
}

void init() {
	cin >> n >> m >> s >> t;
	int tmp;
	for (int i = 1; i <= n; i++)
		f[i] = i;
	for (int i = 1; i <= m; i++) {
		long long x, y, z;
		cin >> x >> y >> z;
		M++;
		edge[M].u = x;
		edge[M].v = y;
		edge[M].w = z;
		M++;
		edge[M].u = y;
		edge[M].v = x;
		edge[M].w = z;
	}
}

int find(int x) {
	if (f[x] != x)
		return f[x] = find(f[x]);
	return x;
}

void kruskal() {
	sort(edge + 1, edge + M + 1, cmp);
	for (int i = 1; i <= M; i++) {
		int x = edge[i].u;
		int y = edge[i].v;
		if (find(x)^find(y))
			f[x] = f[y];
		if (find(s) == find(t)) {
			cout << edge[i].w;
			exit(0);
		}
	}
}

int main() {
	init();
	kruskal();
	return 0;
}
2023/10/8 08:46
加载中...