并查集模板题
只要按时间从小到达排序,然后加入并查集中即可,维护最大值。
如果并查集的数量等于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;
}