题目
思路
并查集扩展域水题。
考虑敌人域与朋友域,这里的敌人具有传递性,同时题目要求输出最大一组,所以按从大到小排序然后按要求合并即可(如果2人已经在同一集合中,可以输出,然后exit(0))
code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
int fa[20001];
struct f{
int x,y,w;
} u[100010];
bool cmp(f a,f b)
{
return a.w>b.w;
}
int find(int x)
{
if (fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
int main()
{
cin>>n>>m;
for (int i=1;i<=2*n;i++) fa[i]=i;
for (int i=1;i<=m;i++) cin>>u[i].x>>u[i].y>>u[i].w;
sort(u+1,u+1+m,cmp);
for (int i=1;i<=m;i++)
{
if (find(u[i].x)==find(u[i].y))
{
cout<<u[i].w;
return 0;
}
fa[find(u[i].x)]=find(n+u[i].y);
fa[find(u[i].y)]=find(n+u[i].x);
}
cout<<0;
return 0;
}