为什么这道题dfs不用还原现场让visj=false(注释掉的那一行)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 10010;
int K, n, m;
int a, b;
int ans;
int e[N], h[N], ne[N], idx;
int k[N];
int cnt[N];
bool vis[N];
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
void dfs(int u) {
cnt[u]++;
for (int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if (!vis[j]) {
vis[j] = true;
dfs(j);
//vis[j] = false;
}
}
}
int main() {
memset(h, -1, sizeof h);
scanf("%d%d%d", &K, &n, &m);
for (int i = 1; i <= K; i++)
scanf("%d", &k[i]);
while (m--) {
scanf("%d%d", &a, &b);
add(a, b);
}
for (int i = 1; i <= K; i++) {
memset(vis, 0, sizeof vis);
vis[k[i]] = true;
dfs(k[i]);
}
for (int i = 1; i <= n; i++)
if (cnt[i] == K) ans++;
printf("%d\n", ans);
return 0;
}