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

     

    代码:

    #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

  • 相关阅读:
    zookeeper 简介
    缓存雪崩 缓存穿透
    SpringCloud实战2-Ribbon客户端负载均衡
    SpringCloud实战1-Eureka
    JVM笔记9-Class类文件结构
    JVM笔记8-虚拟机性能监控与故障处理工具
    JVM笔记7-内存分配与回收策略
    SpringAOP-JDK 动态代理和 CGLIB 代理
    MySQL多数据源笔记5-ShardingJDBC实战
    MySQL多数据源笔记4-Mycat中间件实战
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13652771.html
Copyright © 2011-2022 走看看