zoukankan      html  css  js  c++  java
  • 洛谷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是否具有亲戚关系。

    题解:并查集模板题。

     1 #include<cstdio>
     2 #include<iostream>
     3 
     4 using namespace std;
     5 
     6 int f[5005],n,m,k;
     7 
     8 int find(int a)
     9 {
    10     if(f[a]==a) return f[a];
    11     return f[a]=find(f[a]);
    12 }
    13 
    14 void merge(int a,int b)
    15 {
    16     f[a]=b;
    17     return;
    18 }
    19 
    20 int main()
    21 {
    22     scanf("%d%d%d",&n,&m,&k);
    23     for(int i=1;i<=n;i++)
    24         f[i]=i;
    25     for(int i=1;i<=m;i++)
    26     {
    27         int x,y;
    28         scanf("%d%d",&x,&y);
    29         int f1=find(x);
    30         int f2=find(y);
    31         if(f1==f2) continue;
    32         else merge(f1,f2);
    33     }
    34     for(int i=1;i<=k;i++)
    35     {
    36         int x,y;
    37         scanf("%d%d",&x,&y);
    38         int f1=find(x);
    39         int f2=find(y);
    40         if(f1==f2) printf("Yes
    ");
    41         else printf("No
    "); 
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    java的异常抛出和String类常用方法
    监控工具zabbix
    监控工具nagios
    监控工具cacti
    LB集群
    高可用集群(HA)配置
    vsftp虚拟用户登录配置详解
    Ubuntu中设置静态IP和DNS(转载)
    虚拟机克隆linux系统后需要做的网络设置
    CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27
  • 原文地址:https://www.cnblogs.com/Hoyoak/p/11407176.html
Copyright © 2011-2022 走看看