http://118.190.20.162/view.page?gpid=T54
并查集,类似最小生成树的套路
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int pre[100005];
int findroot(int index) {
if (pre[index] != index) pre[index] = findroot(pre[index]);
return pre[index];
}
void _add(int a, int b) {
int x = findroot(a);
int y = findroot(b);
pre[x] = pre[y] = min(x, y);
}
class AA {
public:
int a, b, c;
bool operator<(const AA x)const {
return c < x.c;
}
};
vector<AA> all;
int main()
{
int n, m;
cin >> n >> m;
AA x;
while (m--) {
cin >> x.a >> x.b >> x.c;
all.push_back(x);
}
sort(all.begin(), all.end());
for (int i = 1; i <= n; ++i)
pre[i] = i;
for (int i = 0; i < all.size(); ++i) {
_add(all[i].a, all[i].b);
if (findroot(n) == 1) { cout << all[i].c << endl; return 0; }
}
}