luogu P1551 亲戚

简介: luogu 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是否具有亲戚关系。


输出格式:

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


思路:并查集

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int fa[maxn];
int find(int x) {
    return x == fa[x] ? x : fa[x] = find(fa[x]);
}
int main() {
    int n, m, q, u, v;
    cin >> n >> m >> q;
    for (int i = 1; i <= n; i++) { //初始化每个集合 
        fa[i] = i;
    } 
    for (int i = 1; i <= m; i++) {
        cin >> u >> v;
        fa[find(u)] = find(v); //合并集合 
    }
    for(int i = 1; i <= q; i++) {
        cin >> u >> v;
        if(find(u) == find(v)) {//判断是否是同一个集合 
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
    return 0;
}
相关文章
|
1月前
lanqiao OJ 182 小朋友崇拜圈
lanqiao OJ 182 小朋友崇拜圈
29 2
|
1月前
lanqiao OJ 131 生命之树
lanqiao OJ 131 生命之树
31 0
|
1月前
lanqiao oj 131 生命之树
lanqiao oj 131 生命之树
27 0
|
测试技术
蓝桥 晚会节目单 (线段树)
蓝桥 晚会节目单 (线段树)
|
机器学习/深度学习
1389:亲戚
1389:亲戚
101 0
2022年9月月赛乙组 T3.棋盘问题
2022年9月月赛乙组 T3.棋盘问题
luogu P1516 青蛙的约会
luogu P1516 青蛙的约会
71 0
luogu P1993 小K的农场(差分约束系统)
luogu P1993 小K的农场(差分约束系统)
67 0
luogu P4884多少个1(BSGS)
luogu P4884多少个1(BSGS)
72 0