#12352. 珅泽教育CSP-J第一轮模拟考第二十六套 第 36 题

珅泽教育CSP-J第一轮模拟考第二十六套 第 36 题

三、完善程序(单项选择题,每小题 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;
}
  1. ③处应填( )。

{{ select(1) }}

  • 0
  • 1
  • w
  • 1-w