zoukankan      html  css  js  c++  java
  • [LUOGU] 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

    并查集。。

    //Writer:GhostCai && His Yellow Duck
    
    #include<iostream>
    #define MAXN 20000
    using namespace std;
    
    int m,n,p;
    
    int fa[MAXN];
    int fnd(int x){
        return fa[x]==x?x:fa[x]=fnd(fa[x]);
    }
    void cat(int x,int y){
        x=fnd(x);y=fnd(y);
        if(x!=y) fa[y]=x;
    }
    
    int main(){
        cin>>n>>m>>p;
        for(int i=1;i<=n;i++) fa[i]=i;
        int x,y; 
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            cat(x,y); 
        }
        for(int i=1;i<=p;i++){
            cin>>x>>y;
            x=fnd(x);y=fnd(y);
            if(x==y) cout<<"Yes
    ";
            else cout<<"No
    ";
        }
        return 0;
    }
    

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9247511.html

  • 相关阅读:
    Struts2框架
    读者写者问题
    哲学家就餐问题
    理解中断
    理解处理机调度
    理解死锁
    理解进程
    Linux CentOS 6.7 挂载U盘
    家庭-养老院模型理解IOC和DI
    Bash基础
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247511.html
Copyright © 2011-2022 走看看