/*
10
0 1 2 1 3 0 0 3 2
10
Send 0
Send 3
Danger 2
Send 7
Send 5
Send 9
Danger 9
Send 4
Send 1
Send 9
1
3
2
1
3
1
1
1
0
1
#include <cstdio>
#include <cstring>
int s[5005];
int head[5005];
bool vis[5005];
struct Node{
int v;
int next;
}edge[10005];
int num;
void add_edge(int u,int v)//数组模拟邻接表。
{
edge[num].v = v;
edge[num].next = head[u];
head[u] = num ++ ;
}
int send(int count)//建立最少情报人员
{
int res = 0;
if(!vis[0])//0号 没有在通到内
{
vis[0] = true;
res ++ ;
}
while(!vis[num] && s[num]!=-1){
vis[num] = true;
res ++ ;
num = s[num];
}
return res;
}
int danger(int u)//撤离人员
{
int i;
int ans = 1;//自身算一个;
for(i=head[u];i!=-1;i=edge[i].next)