#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=10010;
int father[maxn],isroot[maxn]={0};
bool hashtable[maxn]={false};
void init()
{
for(int i=0;i<maxn;i++)
{
father[i]=i;
}
}
int findfather(int x)
{
int a=x;
while(x!=father[x])
{
x=father[x];
}
int z;
while(a!=father[a])
{
z=a;
a=father[a];
father[z]=x;
}
return x;
}
void unio(int a,int b)
{
int faa=findfather(a);
int fab=findfather(b);
if(faa!=fab)
father[faa]=fab;
}
int main()
{
int n,k,num=0,ans=0,temp1,temp2;
cin>>n;
init();
for(int i=0;i<n;i++)
{
scanf("%d %d",&k,&temp1);
if(hashtable[temp1]==false)
{
num++;
hashtable[temp1]=true;
}
for(int j=1;j<k;j++)
{
scanf("%d",&temp2);
if(hashtable[temp2]==false)
{
num++;
hashtable[temp2]=true;
}
unio(temp1,temp2);
}
}
for(int i=1;i<=num;i++)
{
isroot[findfather(i)]++;
}
for(int i=1;i<=num;i++)
{
if(isroot[i]!=0)
ans++;
}
printf("%d %d\n",ans,num);
cin>>k;
int iq1,iq2;
for(int i=0;i<k;i++)
{
scanf("%d %d",&iq1,&iq2);
if(findfather(iq1)==findfather(iq2))
printf("Yes\n");
else
printf("No\n");
}
}
A1118 Birds in Forest (25) 并查集
最新推荐文章于 2024-09-26 11:01:02 发布