友好關係(friend)

2022-05-12 10:14:15 字數 1978 閱讀 3316

**

var

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.

友好關係(friend

描述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個人,陣列元素代表父結點,如果父結點等於本身那麼此節點就是樹的根。

初始時每個結點的父結點都是本身,每個結點單獨為一棵樹。

將有友好關係的都放在同一棵樹裡。

讀入人員關係,判斷是否在同一棵樹裡,(判斷依據就是結點所在樹的根結點相同),如果不是則將他們放入同一棵樹裡(將第乙個人所處樹的根結點的指向第二個人)。