#992. CSP 2020 第一轮(初赛)模拟 第 34 题
CSP 2020 第一轮(初赛)模拟 第 34 题
(封禁 xxs)现有 个 xxs(编号为 到 ),每个 xxs 都有一个关注者,第 个 xxs 的关注者是 。现在管理员要将其中的一些 xxs 的账号封禁,但需要注意的是如果封禁了第 个人,那么为了不打草惊蛇,就不能封禁他的关注者 。现在想知道最多可以封禁多少个 xxs。
输入第一行是一个不超过 的整数 ,第二行是 个 到 的整数表示 。
输出一行,一个整数表示答案。
#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) }}
a[cur]=cur;in[a[cur]]=0;in[a[cur]]--;in[cur]--;