思路:并查集 用i+n来代表i的敌人的集体进行f数组状态转移
这样的话I的敌人都会被转移到一个集体之中,如果中间有人冲突的话,那么就直接输出就好了
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 100010
int f[N];
int n,m;
struct node{
int x,y,z;
bool operator < (const node& a)const{
return z>a.z;
}
}a[N];
int find(int x){
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>a[i].x>>a[i].y>>a[i].z;
sort(a+1,a+m+1);
for(int i=1;i<=2*n;i++) f[i]=i;
int ans=0;
for (int i = 1; i <= m; ++i) {
int x=find(a[i].x),y=find(a[i].y);
if(x==y){
ans=a[i].z;
break;
}
int fx=find(a[i].x+n),fy=find(a[i].y+n);
f[x]=fy,f[y]=fx;
}
cout<<ans<<endl;
return 0;
}