现在有一个并查集,你需要完成合并和查询操作。

输入格式:

第一行包含两个整数 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;
}

 

posted @ 2022-12-09 21:52  墨燃云  阅读(92)  评论(0编辑  收藏  举报