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

  • 相关阅读:
    echarts .NET类库开源
    公司笔试题
    ASP.NET Word/Excel 权限问题
    ASP.NET XmlSerializer权限问题
    jQuery Ajax 处理 HttpStatus
    C#调用百度静态地图
    .NET和F#周报第35周-.NET 8月重大更新
    F#.NET周报 2018第34周-Ionide下载量100万
    字符串切分
    最近很火的一首小诗 You are in your TIME ZONE
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247511.html
Copyright © 2011-2022 走看看