• 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

     

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,q,f[10010],c,d,a,b;
    int fd(int x)//找出x家的大佬 也就是二叉树的祖先节点
    {
        if(f[x]==x)//x是x的爸爸,简单的来说就是x没爸爸了,他是家里最大的大佬,所以返回的x就是我们所求的祖先节点
            return x;
        else 
            return  f[x]=fd(f[x]);//x不是他自己的爸爸,所以他上面还
        //有爸爸,我们的目标是祖先节点,所以我们此时要做的是问他
        //爸爸的爸爸是谁,即再使用一次fd(find)函数【其实就是一个递归过程
    }
    
    void hb(int x,int y){
        //合并x子集和y子集,直接把x子集的祖先节
        //点与y子集的祖先节点连接起来,通俗点来说就是把x的最大祖
        //先变成y子集最大祖先的爸爸
        f[fd(y)]=fd(x);
        return ;
    }
    
    int main(){
        cin>>n>>m>>q;
        for (int i = 1; i <= n; i++)
        {
            f[i]=i;
        }
        for (int i = 1; i <= m; i++)
        {
            cin>>c>>d;
            hb(c,d);
        }
        for (int i = 1; i <= q; i++)
        {
            cin>>a>>b;
            if (fd(a)==fd(b))
            {
                cout<<"Yes"<<endl;
            }else
            {
                cout<<"No"<<endl;
            }
        }
    }

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13652771.html

  • 相关阅读:
    poj 3040 Allowance
    poj 2393 Yogurt factory
    【BZOJ1833】数字计数(ZJOI2010)-数位DP
    【BZOJ4820】硬币游戏(SDOI2017)-概率+高斯消元+KMP
    【BZOJ3626】LCA(LNOI2014)-树链剖分+离线处理
    【BZOJ4817】树点涂色(SDOI2017)-LCT+LCA+线段树
    【BZOJ1135】LYZ(POI2009)-线段树+Hall定理
    【CF392D】Three Arrays-set+multiset
    【51Nod1688】LYKMUL-线段树+乘法原理
    【BZOJ2956】模积和-数论分块
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13652771.html
Copyright © 2020-2023  润新知