**
var友好關係(friend)n,m,p,i,a,b:integer;
f:array[1
..5000
] of
integer;
function
link(x:integer):integer;
vari:integer;
begin
iff[x]=x
then
link:=x
else
link:
=link(f[x]);
end;
begin
assign(input,
'friend.in
');reset(input);
assign(output,
'friend.out
');rewrite(output);
readln(n,m,p);
fori:=1
ton
dof[i]:=i;
fori:=1
tom
dobegin
readln(a,b);
iflink(a)
<>
link(b)
then
f[link(a)]:=b;
end;
fori:=1
top
dobegin
readln(a,b);
iflink(a)
=link(b)
then
writeln(
'yes')
else
writeln('no
');end;
close(input);close(output);
end.
描述description
雖然天使之間的關係大多是友好的,但是由於天使的生命都太漫長了,難免會因為雞毛蒜皮的小事發生矛盾,產生芥蒂。如果天使之間的關係不好,他們共同作戰時的戰鬥力就會大大減弱。為了使隊伍的戰鬥力達到最大,提高贏得神戰的機率,隊長公尺迦勒必須要知道任意兩個天使之間是否友好。
我們規定:x和y關係友好,y和z關係友好,那麼x和z的關係也是友好的。且天使之間只有友好與不友好兩種關係。
現在給出天使間的友好關係,公尺迦勒將會詢問你任意兩個天使間的關係。請編寫程式解決這個問題。
輸入格式input format
第一行:三個整數n,m,p,(n<=5000,m<=5000,p<=5000),分別表示有n個人,m個友好關係,詢問p對天使的關係。
以下m行:每行兩個數 a,b。表示a與b的關係友好。
接下來p行:每行兩個數c,d。詢問c與d的關係是否友好。
輸出格式 output format
p行,每行乙個』yes』或』no』。表示第i個詢問的答案為「具有」或「不具有」友好關係。
樣例輸入 sample input
6 5 3
1 21 5
3 45 2
1 31 4
2 35 6
樣例輸出 sample output
yesyes
no思路:
一維陣列模擬樹結構,下標代表結點第i個人,陣列元素代表父結點,如果父結點等於本身那麼此節點就是樹的根。
初始時每個結點的父結點都是本身,每個結點單獨為一棵樹。
將有友好關係的都放在同一棵樹裡。
讀入人員關係,判斷是否在同一棵樹裡,(判斷依據就是結點所在樹的根結點相同),如果不是則將他們放入同一棵樹裡(將第乙個人所處樹的根結點的指向第二個人)。