zoukankan      html  css  js  c++  java
  • CODEVS 1073 家族

    题目描述 Description

    若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

    输入描述 Input Description

    第一行:三个整数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是否具有亲戚关系。

    输出描述 Output Description

    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

    数据范围及提示 Data Size & Hint

    n<=5000,m<=5000,p<=5000

    解题思路

    真心不知道谁给这个题定了一个大师级,明明就是一个水到不能再水的并查集练习,懒得解释,直接上代码。‘

     1 program family;
     2 var
     3 f:Array[1..5000] of longint;
     4 n,m,p,i,a,b:longint;
     5 function root(x:longint):longint;
     6 begin
     7     if f[x]=x then exit(x);
     8     f[x]:=root(f[x]);
     9     exit(f[x]);
    10 end;
    11 
    12 begin
    13     read(n,m,p);
    14     for i:=1 to n do f[i]:=i;
    15     for i:=1 to m do
    16     begin
    17         read(a,b);
    18         if root(a)<>root(b) then
    19         f[root(a)]:=root(b);
    20     end;
    21 
    22     for i:=1 to p do
    23     begin
    24         read(a,b);
    25         if root(a)=root(b) then writeln('Yes') else writeln('No');
    26     end;
    27 end.
  • 相关阅读:
    搭建ARL资产安全灯塔
    免杀技术发展史
    米酷CMS 7.0.4代码审计
    腾讯安全实习 应用运维安全面试
    Docker部署CTF综合性靶场,定时刷新环境
    西湖论剑2020MISC-Yusa_yyds
    (转)马云炮轰银行监管的解读
    ATT&CK 实战
    Docker环境复现利用Redis未授权访问漏洞 >> 批量扫描检测利用
    修改CH340芯片信息
  • 原文地址:https://www.cnblogs.com/wuminyan/p/4740593.html
Copyright © 2011-2022 走看看