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 }
    家族
  • 相关阅读:
    koa 基础(十)原生node.js 在 koa 中获取表单提交的数据
    koa 基础(九) ejs 模板引擎的使用
    koa 基础(八)koa 中间件的执行顺序
    koa 基础(七)错误处理中间件
    [翻译] KVNProgress
    编写带有点击特效的UIButton
    用Easing函数实现碰撞效果
    EasingAnimation
    什么时候会执行viewDidLoad方法
    UIButton的两种block传值方式
  • 原文地址:https://www.cnblogs.com/zoom1109/p/11004690.html
Copyright © 2011-2022 走看看