裸深搜的话,大约800ms左右,使用vector优化,跑进70ms,stl还是很有用处的,内存懒得处理,全都是最大。
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
const int maxn = 10000+5;
int k,n,m;
int cow[maxn];
int NodeVst[maxn];
int map[maxn][maxn];
int head[maxn][maxn];
bool vstd[maxn];
vector <int> vct[maxn];
void DFS(int s)
{
vstd[s] = true;
NodeVst[s]++;
vector<int >::iterator it;
it = vct[s].begin();
for(;it!=vct[s].end();it++)
{
if(!vstd[*it]&&map[s][*it])
DFS(*it);
}
}
int main()
{
memset(vstd,0,sizeof(vstd));
scanf("%d%d%d",&k,&n,&m);
for(int i=1;i<=k;i++)
{
scanf("%d",&cow[i]);
}
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
map[u][v] = 1;
vct[u].push_back(v);
}
for(int i=1;i<=k;i++)
{
memset(vstd,0,sizeof(vstd));
DFS(cow[i]);
}
int sum = 0;
for(int i=1;i<=n;i++)
{
if(NodeVst[i] == k)
sum++;
}
printf("%d\n",sum);
return 0;
}