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;
}
}
}
浙公网安备 33010602011771号