zoukankan      html  css  js  c++  java
  • RQNOJ PID331 家族

    题目描述

    若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

    规定: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,表示Ai和Bi具有亲戚关系。

    接下来p行:每行两个数Pi,Pj,询问Pi和Pj是否具有亲戚关系。

    输出格式

    P行,每行一个’Yes’或’No’。表示第i个询问的答案为“具有”或“不具有”亲戚关系。

    样例输入

    6 5 3
    1 2
    1 5
    3 4
    5 2
    1 3
    1 4
    2 3
    5 6

     

    样例输出

    Yes
    Yes
    No

    题解

      并查集;

    代码如下:

     1 #include<iostream>
     2 using namespace std;
     3 int n, m, k, pre[10010];
     4 void init(){
     5     for(int i = 1; i <= n; i++){
     6         pre[i] = i;
     7     }
     8 }
     9 int getf(int v){
    10     if(pre[v] == v) return v;
    11     else{
    12         return pre[v] = getf(pre[v]);
    13     }
    14 }
    15 void meg(int v, int u){
    16     int t1 = getf(v), t2 = getf(u);
    17     if(t1 != t2){
    18         pre[t2] = t1;
    19     }
    20 }
    21 bool is_sam(int x, int y){
    22     int t1 = getf(x), t2 = getf(y);
    23     if(t1 == t2)    return true;
    24     else    return false;
    25 }
    26 int main(){
    27     cin >> n >> m >> k;
    28     init();
    29     for(int i = 1; i <= m; i++){
    30         int x, y;
    31         cin >> x >> y;
    32         meg(x, y);
    33     }
    34     for(int i = 1; i <= k; i++){
    35         int x, y;
    36         cin >> x >> y;
    37         if(is_sam(x, y))   cout << "Yes" << endl;
    38         else    cout << "No" << endl;
    39     }
    40     return 0;
    41 }
    家族
  • 相关阅读:
    Synplify9.6.2破解(转帖)
    让博客园博客自动生成章节目录索引
    如何学好FPGA
    verilog 不可综合语句
    在FPGA中使用for循环一定浪费资源吗?
    在verilog中调用VHDL模块
    C#和Java中执行SQL文件脚本的代码(非常有用)
    C#通用JSON帮助类
    公共的Json操作C#类
    Calendar.NET
  • 原文地址:https://www.cnblogs.com/zoom1109/p/11004690.html
Copyright © 2011-2022 走看看