#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int i,f[1000000],n,sum,j;
bool pd[1000000];
char s[1000000];
int find(int x)
{
if (f[x]==x) return x;
return f[x]=find(f[x]);
}
void hb(int x,int y)
{
int fx=find(x);int fy=find(fy);
if (fx!=fy) f[fx]=fy;
return;
}
int main()
{
//freopen("xx.in","r",stdin);
//freopen("xx.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
f[i]=i;
for (i=1;i<=n;i++)
{
gets(s+1);
sum=0;
for (j=1;j<=strlen(s+1);j++)
if (s[j]==' ')
{
hb(i,sum);
sum=0;
}
else sum=sum*10+s[j]-48;
hb(i,sum);
}
sum=0;
for (i=1;i<=n;i++)
if (!pd[find(i)]) sum++,pd[find(i)]==true;
printf("%d",sum);
return 0;
}
结果:???
在本地编译器里面一读入第一个数就炸了,然后我试着把每个读入循环的i都输出又没爆,但没读完,望大佬解释!!ORZ