This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int m, n;
int p[100010], o[100010], q[100010], d[100010];
vector <int> v[100010];
int main()
{
scanf("%d%d",&n,&m);
int i;
for(i=2;i<=n;i++){
scanf("%d",p+i);
++o[p[i]];
}
int *f = q, *r = q;
for(i=1;i<=n;i++)if(!o[i])*f++ = i;
for(i=1;i<=n;i++)d[i] = 1;
while(f != r){
int t = *r++;
if(--o[p[t]] == 0)*f++ = p[t], d[p[t]] += d[t];
}
int L = 0, R = n, K = 0;
while(L <= R){
int M = (L+R) >> 1;
for(i=0;i<n;i++){
int u = q[i], cnt = 1;
sort(v[u].begin(), v[u].end());
reverse(v[u].begin(), v[u].end());
for(int j=0;j<M && j<(int)v[u].size();j++)cnt += v[u][j];
v[p[u]].push_back(cnt);
if(i == n-1){
if(cnt >= m)K = M, R = M-1;
else L = M+1;
}
}
for(i=1;i<=n;i++)v[i].clear();
}
printf("%d",K);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |