图论专题-并查集 求最大集合内元素个数

输入:
第一行:关系数目n(n个关系)
第二行-第n行:具体哪两个元素有关系

输出:
有最多元素的集合的元素数

注:若1,2有关系,2,3有关系,则1,3也有关系,即123在一个集合中

#include
using namespace std;
#define N 10000001
int Tree[N];
int findRoot(int x){
	if(Tree[x]==-1) return x;
	else{
		int tmp=findRoot(Tree[x]);
		Tree[x]=tmp;
		return tmp;
	}
} 
int sum[N];
int main(){
	int n;
	while(cin>>n){
		for(int i=0;i<=N;i++){
	    	Tree[i]=-1;
		    sum[i]=1;	
	    }
	while(n--!=0){
		int a,b;
		cin>>a>>b;
		a=findRoot(a);
		b=findRoot(b);
		if(a!=b){
			Tree[a]=b;
			sum[b]+=sum[a];
		}
	}
	int ans=1;
	for(int i=1;i<=N;i++){
		if(Tree[i]==-1&&sum[i]>ans)
		ans=sum[i];
	}
	cout<

图论专题-并查集 求最大集合内元素个数_第1张图片

你可能感兴趣的:(图论,并查集,算法)