原题连接
本题的做法是并查集和Kruskal算法
#include<iostream>
#include<algorithm>
using namespace std;
struct Road {
int x;
int y;
int t;
}road[100001];
bool cmp(Road a, Road b) {
return a.t < b.t;
}
int uni[100001];
int find(int x) {
if (uni[x] != x)
return uni[x] = find(uni[x]);
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
uni[i] = i;
for (int i = 0; i < m; i++)
cin >> road[i].x >> road[i].y >> road[i].t;
sort(road, road + m, cmp);
for (int i = 0; i < m; i++) {
int x = find(road[i].x);
int y = find(road[i].y);
if (x != y) {
n--;
uni[x] = uni[y];
}
if (n == 1) {
cout << road[i].t;
return 0;
}
}
cout << -1;
return 0;
}