题意:
给定一个树形关系图,父节点是子节点得上级,根节点是BOSS,要想给BOSS提意见,直接下级提意见数不小于T%,问最少要多少工人(叶节点)题问
分析:
dp(u)表示让u给上级发信最少需要多少工人
设u有k个儿子节点。
那么dp(u)=(k*T-1)/100+1
/*
dp(u)表示让u给上级发信最少需要多少工人
设u有k个儿子节点。
那么dp(u)=(k*T-1)/100+1
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,t;
vector<int> g[maxn];
int dfs(int u){
int k=g[u].size();
if(k==0) return 1;
vector<int> d;
for(int i=0;i<k;i++){
d.push_back(dfs(g[u][i]));
}
sort(d.begin(),d.end());
int ans=0;
int c=(k*t-1)/100+1;
for(int i=0;i<c;i++){
ans+=d[i];
}
return ans;
}
int main(){
while(scanf("%d%d",&n,&t)&&(n||t)){
for(int i=0;i<=n;i++){
g[i].clear();
}
for(int i=1;i<=n;i++){
int u;
scanf("%d",&u);
g[u].push_back(i);
}
printf("%d\n",dfs(0));
}
return 0;
}