struct node{ll x,y,z;}t[NN];
bool cmp(node l,node r)
{
return l.z>r.z;
}
ll find(ll x)
{
return x==b[x]?x:b[x]=find(b[x]);
}
void solve()
{
cin>>n>>m;
for(int i=0;i<N;i++)b[i]=i;
for(int i=0;i<m;i++)
{
cin>>t[i].x>>t[i].y>>t[i].z;
}
sort(t,t+m,cmp);//m
for(int i=0;i<m;i++)
{
ll fx=find(t[i].x);
ll fy=find(t[i].y);
if(fx==fy)
{
cout<<t[i].z<<'\n';return ;
}
b[fx]=b[find(t[i].y+n)];//把(t[i].y+n)当成t[i].y的分身,更准确的来说,是互为分身,且分身只能出现在一个地方。
b[find(t[i].x+n)]=b[fy];//也有人说,敌人的敌对是朋友(两个阵营的情况下)
}
cout<<0;
}
(种类并查集)牛客·关押罪犯
最新推荐文章于 2024-07-13 21:05:45 发布