#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define For(i,j,k) for(int i=(int)(j);i<=(int)(k);i++)
#define Rep(i,j,k) for(int i=(int)(j);i>=(int)(k);i--)
inline ll read(){
ll x=0;char ch=getchar();bool f=0;
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=1;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
return f?-x:x;
}
void write(ll x){
if(x<0) putchar('-'),x=-x;
if(x>=10) write(x/10);putchar(x%10+'0');
}
void writeln(ll x){write(x);puts("");}
void writep(ll x){write(x);putchar(' ');}
int const K=100+3;
int const N=1000+3;
int const M=10000+3;
int n,m,k,cnt,ans,sum,vis[N],a[N],h[N];
struct edge{
int nt,to;
}e[M];
void add(int x,int y){
e[++cnt]=(edge){h[x],y};
h[x]=cnt;
}
void dfs(int x){
vis[x]=1;
sum+=a[x];
for (int i=h[x];i;i=e[i].nt){
int v=e[i].to;
if (vis[v]) continue;
dfs(v);
}
}
signed main(){
k=read();n=read();m=read();
for (int i=1,x;i<=k;i++) x=read(),a[x]++;
for (int i=1;i<=m;i++){
// int x=read(),y=read();
// add(x,y);
add(read(),read());
}
for (int i=1;i<=n;i++){
sum=0;
memset(vis,0,sizeof(vis));
dfs(i);
if (sum==k) ans++;
}
writeln(ans);
}
为什么加边操作里面杠掉的部分会错,而改成
add(read(),read());
就能过?