zoukankan      html  css  js  c++  java
  • 洛谷P1551 亲戚

    洛谷P1551 亲戚

    原题

    题目背景

    若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

    题目描述

    规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

    输入输出格式

    输入格式

    第一行:三个整数n,m,p,(n<=5000,m<=5000,p<=5000),分别表示有n个人,m个亲戚关系,询问p对亲戚关系。

    以下m行:每行两个数Mi,Mj,1<=Mi,Mj<=N,表示Mi和Mj具有亲戚关系。

    接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。

    输出格式

    P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。

    输入输出样例

    输入样例#1

    6 5 3
    1 2
    1 5
    3 4
    5 2
    1 3
    1 4
    2 3
    5 6

    输出样例#1

    Yes
    Yes
    No

    说明

    非常简单的并查集入门题哦!!!

    solution

    真的非常简单!

     1 #include<iostream>
     2 using namespace std;
     3 int n,m,p,a[10001];
     4 int getf(int i){
     5     if(a[i]==i) return i;
     6     return a[i]=getf(a[i]);
     7 }
     8 void merge(int x,int y){ 
     9     a[getf(x)]=getf(y);
    10     return;
    11 }
    12 bool inquire(int x,int y){ 
    13     return getf(x)==getf(y);
    14 }
    15 int main()
    16 {
    17     cin>>n>>m>>p;
    18     for(int i=1;i<=n;i++)
    19         a[i]=i;
    20     int x,y,pi,pj;
    21     for(int i=1;i<=m;i++)
    22     {
    23         cin>>x>>y;
    24         merge(x,y);
    25     }
    26     for(int i=1;i<=p;i++){
    27         cin>>pi>>pj; 
    28         cout<<(inquire(pi,pj)?"Yes":"No")<<endl;
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    Shell流程控制语句if
    Linux命令之read
    Docker容器(六)——创建docker私有化仓库
    Docker容器(五)——Docker静态化IP
    Docker容器(四)——常用命令
    python笔记
    iOS应用性能调优建议
    QQ音乐项目(OC版)
    iOS : 静态库制作
    iOS : 静态库(.framework)合并
  • 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11208836.html
Copyright © 2011-2022 走看看