本题的收获:
每个结点深搜后,可以设置一些条件使之达到对于想要返回的结果。
#include<bits/stdc++.h>
using namespace std;
vector<int> g[100005];
vector<int> d[100005];
bool cmp(int a,int b){
return a<b;
}
int T;
int dfs(int u){
if(g[u].empty() && u!=0) return 1;
int ans=0;
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
d[u].push_back(dfs(v));
}
int c=(g[u].size()*T-1)/100+1;
sort(d[u].begin(),d[u].end(),cmp);
for(int i=0;i<c;i++)
ans+=d[u][i];
return ans;
}
int main(){
int staff,a,sum=0;
while(scanf("%d %d",&staff,&T) && (staff || T)){
for(int i=0;i<100005;i++){
g[i].clear();
d[i].clear();
}
for(int i=1;i<=staff;i++){
scanf("%d",&a);
g[a].push_back(i);
}
sum=dfs(0);
printf("%d\n",sum);
}
}