P1551 亲戚 并查集题解

P1551 亲戚
是一题经典的并查集的应用,有亲戚关系的为一个集合。

#include<iostream>
using namespace std;
const int maxn=5010;
int pre[5010];
int n,m,p;
void make()//初始化
{
	for (int i=1;i<=n;i++)
	{
		pre[i]=i;
	}
}
int find(int x)//并查集的查操作,带路径压缩
{
	int r=x;
	while (pre[r]!=r)
	{
		r=pre[r];
	}
	int i=x,j;
	while (i!=r)
	{
		j=pre[i];
		pre[i]=r;
		i=j;
	}
	return r;
}
void Union(int x,int y)//并查集的并操作
{
	int fx=find(x);
	int fy=find(y);
	if (fx!=fy)
	{
		pre[fx]=fy;
	}
}
int main()
{
	cin>>n>>m>>p;
	make();
	for (int i=1;i<=m;i++)
	{
		int x,y;
		cin>>x>>y;
		Union(x,y);
	}
	for (int i=1;i<=p;i++)
	{
		int x,y;
		cin>>x>>y;
		if (find(x)==find(y))
		{
			cout<<"Yes"<<endl;
		}
		else
		{
			cout<<"No"<<endl;
		}
	}
}

  

posted @ 2022-03-06 16:36  心悟&&星际  阅读(28)  评论(0编辑  收藏  举报