??1608. 森林里的鸟
作者:
cyuyu
,
2022-07-19 20:41:24
,
所有人可见
,
阅读 168
#include<iostream>
using namespace std;
const int N=1e4+10;
int p[N];
int find(int x){
if(x!=p[x])
p[x]=find(p[x]);
return p[x];
}
int main(){
int n;
cin>>n;
for(int i=1;i<=N;i++){
p[i]=i;
}
int ma=0;
while(n--){
int k;
cin>>k;
int b;
cin>>b;
ma=max(b,ma);
--k;
int b1=find(b);
for(int i=0;i<k;i++){
cin>>b;
ma=max(b,ma);
int b2=find(b);
if(b1!=b2){
p[b2]=b1;
}
}
}
int res=0;
for(int i=1;i<=ma;i++){
if(p[i]==i){
res++;
}
}
int m;
cin>>m;
cout<<res<<' '<<ma<<endl;
while(m--){
int l,r;
cin>>l>>r;
if(find(l)==find(r)){
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
}
return 0;
}