这题实在没有什么好说的,除了需要知道儿子这个信息,什么都不需要.状态设计也很简单
直接上代码:
Code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1e5+10;
vector<int>sons[N];
int n,T,d[N];
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(){
while(scanf("%d%d",&n,&T)&&(n||T))
{
fo(i,0,n) sons[i].clear();
fo(i,1,n)
{
int v;
scanf("%d",&v);
sons[v].push_back(i);
}
printf("%d\n",dp(0));
}
return 0;
}