傳送門
思路:
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
#define ll long long
int f[1010];
bool g[210][210];
int n;
void floyd()
{
for(int k = 1; k <= n; k++)
{
for(int j = 1; j <= n; j++)
{
for(int i = 1; i <= n; i++)
{
if(g[i][k]&&g[k][j])
g[i][j] = true;
}
}
}
}
int main()
{
scanf("%d",&n);
memset(g,false,sizeof(g));
for(int i = 1; i <= n; i++)
f[i] = i;
for(int i = 1; i <= n; i++)
{
int x;
while(scanf("%d",&x) && x)
{
g[i][x] = true;
}
}
floyd();
int ans = 0,cnt;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(g[i][j])
f[j] = f[i];
for(int i = 1; i <= n; i++)
if(f[i] == i)
ans++;
printf("%d\n",ans);
}