并查集-路径优化+秩优化

大数据下秩优化节约50%时间

#include<bits/stdc++.h>
using namespace std;
typedef struct{
	int parent;
	int rank;
}NODE;NODE arr[10010]={0,0}; 
int find(int key)
{//路径压缩 
	if(arr[key].parent!=key)
		arr[key].parent=find(arr[key].parent);
	return arr[key].parent;
}
int main()
{
	int n,m;cin>>n>>m;
	for(int i=0;i<10010;i++)
	{
		arr[i].parent=i;
		arr[i].rank=0;
	}
	while(m--)
	{
		int z;cin>>z;
		if(z==1)
		{
			int a,b;cin>>a>>b;
			int fa=find(a),fb=find(b);//秩优化 
			if(arr[fa].rank>arr[fb].rank)
			{
				arr[fb].parent=arr[fa].parent;
				arr[fa].rank++;
			}
			else 
			{
				arr[fa].parent=arr[fb].parent;
				arr[fb].rank++;
			}
		}
		if(z==2)
		{
			int a,b;cin>>a>>b; 
			if(arr[find(a)].parent==arr[find(b)].parent)
				printf("Y\n");
			else printf("N\n");
		}
	}
}
posted @ 2019-07-05 01:12  一块钱的争论  阅读(251)  评论(0编辑  收藏  举报