洛谷P2746
筱柒Littleseven
QQ:3534947775
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,tot,to[10001],nex[10001],head[110];
int tar_num,top,cnt,vis[110],tar_stack[110],tar_ins[110];
int tar_in[110],tar_out[110],tar_low[110],tar_deep[110],tar_bel[110];
void add(int x,int y)
{
to[++tot]=y;
nex[tot]=head[x];
head[x]=tot;
}
void tarjan(int x)
{
tar_stack[++top]=x; vis[x]=1,tar_ins[x]=1;
tar_deep[x]=++cnt; tar_low[x]=cnt;
for(int i=head[x];i;i=nex[i])
{
int y=to[i];
if(vis[y]==0) tarjan(y),tar_low[x]=min(tar_low[x],tar_low[y]);
else if(tar_ins[y]==1) tar_low[x]=min(tar_low[x],tar_deep[y]);
}
if(tar_deep[x]==tar_low[x])
{
tar_num++; int tmp;
do{
tmp=tar_stack[top--]; tar_ins[tmp]=0;
tar_bel[tmp]=tar_num;
}while(tmp!=x);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int a;
while(cin>>a) { if(a!=0) add(i,a); else break; }
}
for(int i=1;i<=n;i++) { if(vis[i]==0) tarjan(i); }
for(int i=1;i<=n;i++)
for(int j=head[i];j;j=nex[j])
{
if(tar_bel[to[j]]!=tar_bel[i]) tar_out[tar_bel[i]]++,tar_in[tar_bel[to[j]]]++;
}
int sum_in=0,sum_out=0;
for(int i=1;i<=tar_num;i++)
{
if(tar_in[i]==0) sum_in++;
if(tar_out[i]==0) sum_out++;
}
if(tar_num==1) { cout<<1<<endl<<0; return 0; }
cout<<sum_in<<endl<<max(sum_out,sum_in)<<endl;
return 0;
}