7-35 部落 (10 分)

简介: 7-35 部落 (10 分)

7-35 部落 (10 分)


在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。


输入格式:


输入在第一行给出一个正整数N(≤104),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人:


K P[1] P[2] ⋯ P[K]


其中K是小圈子里的人数,P[i](i=1,⋯,K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过104。


之后一行给出一个非负整数Q(≤104),是查询次数。随后Q行,每行给出一对被查询的人的编号。


输出格式:


首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出Y,否则输出N。


输入样例:


4
3 10 1 2
2 3 4
4 1 5 7 8
3 9 6 4
2
10 5
3 7


结尾无空行


输出样例:


1. 10 2
2. Y
3. N


结尾无空行


#include<iostream>
using namespace std;
const int N = 1010;
int n, k, a, b, p[N], maxn, cnt, m;
int find(int x) {
    if(x != p[x]) p[x] = find(p[x]);
    return p[x];
}
void add(int x, int y) {
    x = find(x), y = find(y);
    p[x] = find(y);
}
void init() {
    for (int i = 1; i <= N; i++) {
        p[i] = i;
    }
}
int main() {
    cin >> n;
    init();
    for (int i = 0; i < n; i++) {
        cin >> k;
        for (int j = 0; j < k; j++) {
            if(j == 0) {
                cin >> a;
                maxn = max(a, maxn);
            }
            else {
                cin >> b;
                maxn = max(b, maxn);
                add(a, b);
            }
        }
    }
    for (int i = 1; i <= maxn; i++) {
        if (p[i] == i) cnt++;
    }
    cout << maxn << ' ' << cnt << endl;
    cin >> m;
    for (int i = 0; i < m; i++) {
        cin >> a >> b;
        if(find(a) != find(b)) cout << "N\n";
        else cout << "Y\n";
    }
    return 0;
}


目录
相关文章
|
6月前
1052 卖个萌 (20 分)//部分正确
1052 卖个萌 (20 分)//部分正确
|
7月前
7-35 情人节 (15 分)
7-35 情人节 (15 分)
60 0
|
7月前
|
C++
第十三届蓝桥杯B组C++(试题B:顺子日期)
第十三届蓝桥杯B组C++(试题B:顺子日期)
87 0
|
C++
第八届蓝桥杯省赛 C++ A/B组 - 分巧克力
第八届蓝桥杯省赛 C++ A/B组 - 分巧克力
116 0
L1-035 情人节 (15 分)
L1-035 情人节 (15 分)
138 0
L1-035 情人节 (15 分)
PAT-2021年秋季考试 乙级 7-3 自定义判题程序 (20 分)
在每次允许插入、删除、修改一个字符的前提下,用最少的动作把一个字符串变成另一个字符串,是一道著名的可以用动态规划解决的问题。
118 0
【八月】每日一题 - 1282. 用户分组
【八月】每日一题 - 1282. 用户分组
77 0
L2-024 部落 (25 分)(并查集)
L2-024 部落 (25 分)(并查集)
116 0
部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔法值是第一个人的3倍,以此类推。 现在小Biu想知道整个部落的魔法值和是多少?由于答案比较大,请把答案对1e9+7取模之后输出
部落是一个魔法部落,部落中一共有n+1个人,小Biu是魔法部落中最菜的,所以他的魔力值为1,魔法部落中n个人的魔法值都不相同,第一个人的魔法值是小Biu的3倍,第二个人的魔法值是第一个人的3倍,以此类推。 现在小Biu想知道整个部落的魔法值和是多少?由于答案比较大,请把答案对1e9+7取模之后输出
131 0
L1-073 人与神 (5 分)
L1-073 人与神 (5 分)
95 0