刻录光盘
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=205;
int n;
int mapp[N][N];
int p[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=n;i++){
int x;
while(scanf("%d",&x)&&x!=0){
mapp[i][x]=1;//mapp[i][x]=1表示i与x是连通的,有向边
}
}
//floyd算法这种用法是真的nice
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mapp[i][j]=mapp[i][j]||(mapp[i][k]&&mapp[k][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(mapp[i][j])
p[j]=p[i];//p[i]是p[j]的父节点
int cnt=0;
for(int i=1;i<=n;i++)
if(p[i]==i)
cnt++;
printf("%d\n",cnt);
return 0;
}