CF729E 题解

题目传送门

题目分析

这是一道思维题。

首先我们要找到这道题的突破口,即比较特殊的人——主管。

主管一定没有上司,那么回答 \(0\) 的就会有两种人:回答错误的人或主管。

接着我们再看其他员工的上司。由于员工之间的关系构成了一棵树,所以一个员工的上司数量一定只比他父亲(直接上司)的上司数量多 \(1\)

那么不难推出这个数列的性质:

  1. 只有一个 \(0\)(主管)。

  2. 数列必须是连续的。

然后就开始找,一旦发现没有连续的部分,直接把最大的数填进去就可以了。

贴上代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,s;
int x;
int bot[maxn];
int cnt,ans;
inline void init(){
	cin>>n>>s;cnt=1;
	for(register int i=1;i<=n;++i){
		cin>>x;
		if(x>0&&i==s) ans++;
		else bot[x]++;
	}
}
int main(){
	init();
	for(register int i=1;cnt<=n-1;++i){
		if(bot[i]==0) cnt++;
		else cnt+=bot[i];
		if(bot[i]==0) ans++;
	}
	cout<<ans;
}
posted @ 2022-09-29 12:58  yizhixiaoyun  阅读(59)  评论(0)    收藏  举报