友好关系(friend)

 

代码
 
   
var n,m,p,i,a,b:integer;
f:
array [ 1 .. 5000 ] of integer;
function link(x:integer):integer;
var i:integer;
begin
if f[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);
for i: = 1 to n do f[i]: = i;
for i: = 1 to m do
begin
readln(a,b);
if link(a) <> link(b) then f[link(a)]: = b;
end ;
for i: = 1 to p do
begin
readln(a,b);
if link(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 2

1 5

3 4

5 2

1 3

1 4

2 3

5 6

 

样例输出 Sample Output

    Yes

Yes

No

 

思路:

一维数组模拟树结构,下标代表结点第i个人,数组元素代表父结点,如果父结点等于本身那么此节点就是树的根。

初始时每个结点的父结点都是本身,每个结点单独为一棵树。

将有友好关系的都放在同一棵树里。

读入人员关系,判断是否在同一棵树里,(判断依据就是结点所在树的根结点相同),如果不是则将他们放入同一棵树里(将第一个人所处树的根结点的指向第二个人)。

转载于:https://www.cnblogs.com/nbalive2001/archive/2010/11/11/1874546.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值