题目:
若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。
规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。
#include<stdio.h>
using namespace std;
long f[5001];
long n,m,p,i,x,y;
long getfather(long u)
{
if (f[u]==u) return u;
f[u]=getfather(f[u]);
return f[u];
}
void he(long u,long v)
{
if (f[u]==f[v]) return;
u=getfather(u);
v=getfather(v);
f[u]=v;
}
int main()
{
scanf("%ld %ld %ld",&n,&m,&p);
for (i=1;i<=n;i++)
f[i]=i;
for (i=1;i<=m;i++)
{
scanf("%ld%ld",&x,&y);
he(x,y);
}
for (i=1;i<=p;i++)
{
scanf("%ld%ld",&x,&y);
if (getfather(x)==getfather(y))printf("Yes\n");
else printf("No\n");
}
return 0;
}