#12351. 珅泽教育CSP-J第一轮模拟考第二十六套 第 35 题
珅泽教育CSP-J第一轮模拟考第二十六套 第 35 题
三、完善程序(单项选择题,每小题 3 分,共 30 分)
程序(1)
(封禁账号)现有 n 个账号(编号为 1 到 n),每个账号都有一个关注者,第 i 个账号的关注者是 aᵢ。管理员要封禁一些账号;若封禁了第 i 个账号,为了不打草惊蛇,就不能封禁它的关注者 aᵢ。求最多可以封禁多少个账号。输入第一行是不超过 300000 的整数 n,第二行是 n 个 1 到 n 的整数 aᵢ;输出一个整数表示答案。
#include <cstdio>
using namespace std;
#define MAXN 300005
int n, ans = 0, a[MAXN], in[MAXN] = {0};
bool vis[MAXN] = {0};
void dfs(int cur, int w) {
if (vis[cur])
return;
vis[cur] = true;
if (w == 1) ans++;
①
if (②)
dfs(a[cur], ③);
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
in[a[i]]++;
}
for (int i = 1; i <= n; i++)
if (!in[i]) ④;
for (int i = 1; i <= n; i++)
if (⑤) dfs(i, 0);
printf("%d\n", ans);
return 0;
}
- ②处应填( )。
{{ select(1) }}
in[a[cur]] != 0 || w == 1in[a[cur]] == 0 || w == 0in[a[cur]] != 0 || w == 0in[a[cur]] == 0 || w == 1