40分求助大佬
查看原帖
40分求助大佬
235871
233yyyy楼主2020/10/27 01:55

求助大佬!!!

带权并查集

group[n]=0表示n和n的爸爸是同类

group[n]=1表示n和n的爸爸是敌人

#include<bits/stdc++.h>
using namespace std;
int N,M;
int fa[20100];
int group[20100];
struct Node
{
	int x,y;
	int c;
};
Node event[100100];
bool cmp(Node a,Node b)
{
	return a.c>b.c;
}
int find(int n)
{
	if(n!=fa[n])
	{
		fa[n]=find(fa[n]);	
		if(group[fa[n]]!=group[n])
			group[n]=1;
		else
			group[n]=0;
	}
	return fa[n];
}
int main()
{
	cin>>N>>M;
	for(int i=1;i<=N;i++)
		fa[i]=i;
	for(int i=1;i<=M;i++)
		cin>>event[i].x>>event[i].y>>event[i].c;
		
	sort(event+1,event+1+M,cmp);
	
	for(int i=1;i<=M;i++)
	{
		int xx=find(event[i].x);
		int yy=find(event[i].y);
		
		if(xx==yy)
		{
			if(group[event[i].x]==group[event[i].y])
			{
				cout<<event[i].c<<endl;
				return 0;	
			}
		}
		if(xx!=yy)
		{
			fa[xx]=yy;
			group[xx]=1;
		}
	}
	cout<<0<<endl;
} 
2020/10/27 01:55
加载中...