• 友好关系(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个人,数组元素代表父结点,如果父结点等于本身那么此节点就是树的根。

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

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

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

  • 相关阅读:
    数据库范式
    java String.split()用法
    1.4 IoC控制反转
    利用shrinkwrap锁定依赖版本
    清晨开启电脑自动拉取项目更新
    JS如何获取屏幕、浏览器及网页高度宽度?
    Navigator 对象,能够清楚地知道浏览器的相关信息
    iconfont 转换为图标字体
    VS code的搜索、替换与正则替换
    点九图制作方法
  • 原文地址:https://www.cnblogs.com/nbalive2001/p/1874546.html
Copyright © 2020-2023  润新知