题意:已知一张图的总祖先和每个顶点拥有的祖先个数,问至少需要修改几个,使得这张图满足情况
思路:模拟一下,大概就知道了吧。
#include<bits/stdc++.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int MOD=1e9+7;
ll a[N],sum[N],dis[N];
int main(void){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll n,s;
cin >>n>>s ;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++){
if(a[i]==0&&i!=s) a[i]=1e18+8;
}
vector<ll> t;
ll ans=0;
if(a[s]!=0) ans++;
a[s]=0;
sort(a+1,a+1+n);
for(int i=1;i<=n;i++) t.pb(a[i]);
ll now=1;
for(int i=1;i<(int)t.size();i++){
if(t[i]==now) now++;
else if(t[i]<now) continue;
else if(t[i]>now){
while(t[i]>now){
if((int)t.size()-1==i){
cout << ans+1 << endl;
return 0;
}
now++;
t.erase(prev(t.end()));
ans++;
}
now++;
}
}
cout << ans << endl;
return 0;
}
/*
5 1
0 0 1 3 4
*/