P1111 修复公路

发布时间 2023-09-26 18:38:22作者: 不o凡

并查集模板题
只要按时间从小到达排序,然后加入并查集中即可,维护最大值。
如果并查集的数量等于n,则直接退出即可。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct node {
	int u, v, t;
	bool operator<(const node& a)const {
		return t < a.t;
	}
}a[N];
int f[N],cnt=1,ans;
int find(int x) {
	return f[x] == x ? x : f[x] = find(f[x]);
}
int main() {
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) f[i] = i;
	for (int i = 1; i <= m; i++) {
		cin >> a[i].u >> a[i].v >> a[i].t;
	}
	sort(a + 1, a + 1 + m);
	for (int i = 1; i <= m; i++) {
		int x = find(a[i].u), y = find(a[i].v);
		if (x != y) {
			cnt++;
			f[x] = y;
			ans =max(a[i].t,ans);
			if (cnt == n) break;
		}	
	}
	if (cnt == n) cout << ans;
	else cout << -1;
	return 0;
}