并查集,虽然之前做过一些题,可能好久没做了,不太会处理
首先说一下思路:
(个人感觉可以在纸上画一下,然后好好想想)
代码:
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 200010;
int f[N];
struct solve{
int x, y, w;
}ans[N];
bool cmp(solve a, solve b){
return a.w > b.w;
}
int Find(int x){
return f[x] == x ? f[x] : f[x] = Find(f[x]);
}
int main() {
int n, m;
scanf("%d%d",&n,&m);
for (int i = 1; i <= 2 *n ; i++) f[i] = i;
for (int i = 1; i <= m ; i++){
int x, y, z;
scanf("%d%d%d",&x,&y,&z);
ans[i].x = x;
ans[i].y = y;
ans[i].w = z;
}
sort(ans + 1,ans + m + 1, cmp);
for (int i = 1; i <= m; i++){
int x = ans[i].x;
int y = ans[i].y;
int xx = Find(x);
int yy = Find(y);
if (xx == yy){
printf("%d\n",ans[i].w);
return 0;
}
f[xx] = Find(n + ans[i].y);
f[yy] = Find(n + ans[i].x);
}
cout<<"0"<<endl;
return 0;
}