首页 > 编程语言 > 详细

问题 E: 家庭排序 (family)

时间:2020-07-24 18:04:32      阅读:67      评论:0      收藏:0      [点我收藏+]

题目描述

妈妈。——By 某班班长。
干嘛?——By 某班英语课代表。

某班的同学曾经扬言说连计算机都理不清某班的亲戚关系。终于,Jay 在考试之后有空来理一理某班的某种关系了手动滑稽。但是他因为考试考不好被家长抓去学习没时间,所以叫你来帮个忙。
某级某某班的家庭共有N个人。有M个操作,操作共有2种,为1或2。每个操作都对应2个人Xi和Yi。
当操作种类为1时,表示Xi与Yi有某种关系。
当操作种类为2时,因为这是一道签到题,所以你只要输出Xi与Yi是否在同一家庭内(只需要判断在这个询问事件之前的关系),是的话输出 Y;否则话输出 N。

输入

第一行包含两个整数N,M,表示共有N个人和M个关系。
接下来M行,每行包含三个整数Zi,Xi,Yi,分别表示操作种类以及两个人的编号。

输出

对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N。

样例输入 Copy

4 7
2 1 2
1 1 2
2 1 2
1 3 4
2 1 4
1 2 3
2 1 4
#include <iostream>
 
using namespace std;
 
const int N = 10010;
 
int n, m;
int f[N];
 
int find(int x){
    if (f[x] != x) return f[x] = find(f[x]);
    return f[x];
}
int main(){
    scanf("%d%d", &n, &m);
     
    for (int i = 1; i <= n; i ++ ) f[i] = i;
    while (m -- ){
        int a, b, t;
        scanf("%d%d%d", &t, &a, &b);
         
        if (t == 1){
            f[find(a)] = find(b);
        }
        else {
            if (find(a) == find(b)) puts("Y");
            else puts("N");
        }
    }
     
    return 0;
}

  

问题 E: 家庭排序 (family)

原文:https://www.cnblogs.com/Iamcookieandyou/p/13372735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!