【题解】
显然是并查集查询有多少个不相交集合,最后计数输出即可。
【代码】
#include<bits/stdc++.h>
using namespace std;
int pre[1005];
int Find(int x)
{
return x==pre[x]?x:pre[x]=Find(pre[x]);
}
void join(int x,int y)
{
x=Find(x),y=Find(y);
if(x!=y) pre[y]=x;
}
int main()
{
for(int i=1;i<=1000;i++) pre[i]=i;
int n; scanf("%d",&n);
int a[1005];
for(int i=0;i<n;i++){
int k; scanf("%d:%d",&k,&a[i]);
for(int j=1;j<k;j++){
int y; scanf("%d",&y);
join(a[i],y);
}
}
map <int,int> mp;
for(int i=0;i<n;i++)
{
int x=Find(a[i]);
if(mp.count(x)==0) mp[x]=1;
else mp[x]++;
}
vector <int> vec;
for(int i=1;i<=1000;i++)
if(mp.count(i))
vec.push