水题,dfs搜索。
//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/8/14.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
int arrivetime[1010];
int cow[105];
int vis[1010];
vector<int> edges[1010];
int K,N,M;
void dfs(int s)
{
for(int i=0;i<edges[s].size();i++)
{
int e=edges[s][i];
if(!vis[e])
{
vis[e]=1;
arrivetime[e]++;
dfs(e);
}
}
}
int main()
{
while(scanf("%d%d%d",&K,&N,&M)!=EOF)
{
memset(arrivetime,0,sizeof(arrivetime));
for(int i=0;i<=N;i++) edges[i].clear();
for(int i=0;i<K;i++)
{
scanf("%d",&cow[i]);
}
int s,e;
for(int i=0;i<M;i++)
{
scanf("%d%d",&s,&e);
edges[s].push_back(e);
}
for(int i=0;i<K;i++)
{
memset(vis,0,sizeof(vis));
int s=cow[i];
arrivetime[s]++;
vis[s]=1;
dfs(s);
}
int cnt=0;
for(int i=1;i<=N;i++)
{
if(arrivetime[i]==K) cnt++;
}
printf("%d\n",cnt);
}
return 0;
}