现在有一个并查集,你需要完成合并和查询操作。
输入格式:
第一行包含两个整数 N,M ,表示共有 N 个元素和 M 个操作。
接下来 M 行,每行包含三个整数 zi,xi,yi 。
当 zi=1 时,将 xi与yi所在的集合合并。
当 zi=2 时,输出xi与yi 是否在同一集合内,是的输出 Y ;否则输出 N.
输出格式:
对于每一个 zi=2的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N 。
输入样例:
4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4输出样例:
N
Y
N
Y#include <bits/stdc++.h>
using namespace std;
int a[10086];
int root(int x)
{
	if(a[x]==x)
	{
		return x;
	}
	else
	{
		a[x]=root(a[x]);
		return a[x];
	}
}//查根
void bine(int x,int y)
{
	x=root(x);
	y=root(y);
	if(x!=y)
	{
		a[x]=y;
	}
}//合并,可优化
int main() 
{
	int n,m,i;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		a[i]=i;
	}
	
	for(i=1;i<=m;i++)
	{
		int op,x,y;
		cin>>op>>x>>y;
		if(op==1)
		{
			bine(x,y);
		}
		else
		{
			if(root(x)==root(y))
			{
				cout<<"Y"<<endl;
			}
			else
			{
				cout<<"N"<<endl;
			}
		}
	}
	return 0;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号