原题链接:https://vjudge.net/problem/UVA-12186
分类:树形DP
备注:简单推理
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,t;
vector<int>sons[maxn];
int dp(int u){
if(sons[u].empty())return 1;
int k = sons[u].size();
vector<int>d;
for(int i=0;i<k;i++)
d.push_back(dp(sons[u][i]));
sort(d.begin(),d.end());
int c=(k*t-1)/100+1;
int ans=0;
for(int i=0;i<c;i++)
ans+=d[i];
return ans;
}
int main(void){
// freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&t)&&(n||t)){
for(int i=0;i<=n;i++)sons[i].clear();
for(int i=1;i<=n;i++){
int f; scanf("%d",&f);
sons[f].push_back(i);
}
printf("%d\n",n==0?0:dp(0));
}
return 0;
}