并查集裸题——pku1611

View Code
#include<stdio.h>

int f[30009];

int find(int pos)
{
if(f[pos]==-1)return pos;
return f[pos]=find(f[pos]);
}

int un(int a,int b)
{
int fa=find(a),fb=find(b);
if(fa==fb)return 0;
f[fa]
=fb; return 1;
}

int main()
{
int n,m,i,j,add,one,temp;
while(scanf("%d%d",&n,&m),n||m)
{
for(i=0;i<=n;i++)
{
f[i]
=-1;
}

for(i=1;i<=m;i++)
{
scanf(
"%d",&add);
scanf(
"%d",&one);
for(j=2;j<=add;j++)
{
scanf(
"%d",&temp);
un(one,temp);
}
}

add
=0;
for(i=0;i<n;i++)
{
temp
=find(0);
if(find(i)==temp)
add
++;
}

printf(
"%d\n",add);
}
}
原文地址:https://www.cnblogs.com/huhuuu/p/1963802.html