vector:
#include <bits/stdc++.h>
using namespace std;
int k, n, m, a[105], vis[1005], ans;
vector <int> G[1005];
void dfs(int now, int x) {
if (vis[now] == x - 1) {
vis[now] = x;
}
for (int i = 0; i < G[now].size(); i++) {
if (vis[G[now][i]] != x) {
dfs(G[now][i], x);
}
}
return ;
}
int main() {
cin >> k >> n >> m;
for (int i = 1; i <= k; i++) cin >> a[i];
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
}
for (int i = 1; i <= k; i++) {
dfs(a[i], i);
}
for (int i = 1; i <= n; i++) {
if (vis[i] == k) {
ans++;
}
}
cout << ans;
return 0;
}
邻接矩阵:
#include <bits/stdc++.h>
using namespace std;
int k, n, m, a[105], vis[1005], ans, G[1005][1005];
void dfs(int now, int x) {
if (vis[now] == x - 1) {
vis[now] = x;
}
for (int i = 1; i <= n; i++) {
if (G[now][i] && vis[i] != x) {
dfs(i, x);
}
}
return ;
}
int main() {
cin >> k >> n >> m;
for (int i = 1; i <= k; i++) cin >> a[i];
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u][v] = 1;
}
for (int i = 1; i <= k; i++) {
dfs(a[i], i);
}
for (int i = 1; i <= n; i++) {
if (vis[i] == k) {
ans++;
}
}
cout << ans;
return 0;
}