描述
有 N 个牧场( 编号分别为 1,2,...,N ),这些牧场之间共有 M 条单向通行的路,每条路直接连接着某两个牧场( 不存在某条路的起点和终点相同的情况 )。在这些牧场中,共居住着 K 头奶牛( 编号分别为 1,2,...,K ),它们想找一个大家都能到达的牧场进行野餐。问:这样的牧场,共有多少个?
输入描述
第 1 行,包含 3 个整数 K,N,M
接下来 K 行,每行包含 1 个整数,分别代表 1,2,...,K 号奶牛居住在哪号牧场。
接下来 M 行,每行包含 2 个整数 a,b,代表有一条连接着 a 号与 b 号牧场的单向通行的路,可以从 a 到 b
【测试数据范围】
1≤K≤100,1≤N≤1000,1≤M≤10000 a!=b
输出描述
输出一行,包含 1 个整数,代表可以作为聚餐地点的牧场有多少个
用例输入 1
2 4 4 2 3 1 2 1 4 2 3 3 4
用例输出 1
2
提示
【样例解释】奶牛们可以选择在 3 号牧场或 4 号牧场进行野餐
内存:64mb;时间:1s
#include<iostream>
#include<vector>
using namespace std;
int i,k,n,m,p,a,b,all,p[110],j;
bool q2[1010][110],g;
vector <int> q1[1010];
void dfs(int i,int t){
q2[t][i]=1;
for(j=1;j<=q1[t].size();j++)if(q2[q1[t][j]][i]==0)dfs(i,q1[t][j]);
}
int main(){
scanf("%d%d%d",&k,&n,&m);
for(i=1;i<=k;i++)cin>>p1[i];
for(i=0;i<m;i++){
cin>>a>>b;
q1[a].push_back(b);
}
for(i=1;i<=k;i++){
dfs(i,p[i]);
}
for(i=1;i<=n;i++){
g=true;
for(j=1;j<=k&&g;j++){
if(q2[i][j]!=0)g=false;
}
if(g)all++;
}
cout<<all;
return 0;
}
现在是WA+RE了QAQ