为什么不用还原现场
查看原帖
为什么不用还原现场
728614
dingxiongyue楼主2024/11/9 19:07

为什么这道题dfs不用还原现场让visj=falsevis_j=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;
}
2024/11/9 19:07
加载中...