奶牛聚会
https://koitp.org/problem/USACO_2006DEC_SILVER_COWPICNIC/read/
import java.util.*;
//https://www.cnblogs.com/program-ccc/p/5628106.html
public class Main{
static Scanner cin = new Scanner(System.in);
static final int MAXN=1005;
static int k,n,m;
static int[] load=new int[105];
static ArrayList<Integer>[] arc=new ArrayList[MAXN];//存放路的连接信息,用连接表存储
static int[] mark=new int[MAXN];
static boolean[] vis=new boolean[MAXN];
static void dfs(int u)
{
mark[u]++;
vis[u]=true;
for(int i=0;i<arc[u].size();i++)
{
int to=arc[u].get(i);
if(!vis[to])
{
dfs(to);
}
}
}
public static void main(String[] args){
while(cin.hasNext())
{
Arrays.fill(load, 0);
Arrays.fill(mark, 0);
k=cin.nextInt();//牛的个数
n=cin.nextInt();//草地的个数
m=cin.nextInt();//路的个数
for(int i=1;i<=n;i++)
{
arc[i]=new ArrayList<Integer>();
}
for(int i=1;i<=k;i++)
{
load[i]=cin.nextInt();//牛的开始位置
}
for(int i=0;i<m;i++)
{
int u,v;
u=cin.nextInt();
v=cin.nextInt();
arc[u].add(v);
}
for(int i=1;i<=k;i++)
{
if(load[i]!=0)
{
Arrays.fill(vis, false);
dfs(load[i]);//DFS每一头牛
}
}
int res=0;
for(int i=1;i<=n;i++)
{
if(mark[i]==k)
res++;
}
System.out.println(res);
}
}
}