第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。
以下m行:每行两个数Mi,Mj,1<=Mi,Mj<=N,表示Ai和Bi具有亲戚关系。
接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。
输出格式:
P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。
Yes
Yes
No
代码:
var n,m,p,i,x,y:longint;
f:array[1..5000] of longint;
function find(x:longint):longint; //查找父亲并路径压缩
begin
if f[x]=x then exit(x)
else find:=find(f[x]);
f[x]:=find; //路径压缩
end;
begin
readln(n,m,p);
for i:=1 to n do f[i]:=i; //每个元素属于自己集合
for i:=1 to m do
begin
readln(x,y); //读入一组数,并找他们的父亲
x:=find(x);
y:=find(y);
if x<>y then f[x]:=y; //如何父亲不同则合并
end;
for i:=1 to p do
begin
readln(x,y);
x:=find(x);
y:=find(y);
if x=y then writeln('Yes')
else writeln('No');
end;
end.