问题 E: 家庭排序 (family)

题目描述

妈妈。——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;
}

  

猜你喜欢

转载自www.cnblogs.com/Iamcookieandyou/p/13372735.html