#include<iostream>
#include<unordered_map>
#include<functional>
#include<vector>
using namespace std;
#define MX int(1e4+10)
int main(){
unordered_map<int, int> mp;
vector<int>a(MX);
for (int i = 0; i < MX;++i)
a[i] = i;
function<int(int)> fnd = [&](int x)
{
return a[x] == x ? x : a[x] = fnd(a[x]);
};
function<void(int, int)> unn = [&](int x, int y)
{
a[fnd(x)] = fnd(y);
};
int n;
cin >> n;
for (int i = 0; i < n;++i){
int m,lst;
cin >> m;
for (int j = 0; j < m;++j){
int x;
cin >> x;
mp[x] = 1;
if(j>0)
unn(x, lst);
lst = x;
}
}
int cnt = 0;
for (int i = 1; i < MX;++i)
if(mp.count(i)&&a[i]==i)
cnt++;
cout << mp.size() << " " << cnt << "\n";
int k;
cin >> k;
while(k--){
int x, y;
cin >> x >> y;
puts(fnd(x) == fnd(y) ? "Y" : "N");
}
}
【并查集】L2-024 部落 (25 分)
最新推荐文章于 2024-06-08 20:30:00 发布