uva 12186

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<queue>
#include<vector>
#include<sstream>
#include<cmath>
#include<queue>
#include<cctype>
#include<set>
#include<unordered_set>
using namespace std;

const int maxn = 100000 + 10;
int n, T;
vector<vector<int> > v;

int dp(int i){
  if(v[i].empty()) return 1;
  vector<int>temp;
  int k = v[i].size();
  for(int j = 0; j < k; j++) temp.push_back(dp(v[i][j]));
  sort(temp.begin(),temp.end());
  int c = ceil(k*T*1.0/100);
  int ans = 0;
  for(int i = 0; i < c; i++) ans += temp[i];
  return ans;
}

int main(){
   while( scanf("%d%d",&n,&T) == 2 && n && T){
       v.clear();
       v.resize(maxn);
       int a;
       for(int i = 1; i <= n; i++){
           scanf("%d",&a);
           v[a].push_back(i);
       }
       printf("%d\n",dp(0));
   }
   return 0;
}

猜你喜欢

转载自blog.csdn.net/a874288174/article/details/80033337