http://vjudge.net/problem/UVA-12186
d(u)表示让u给上级发信最少需要多少工人
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+10; int N,T,f; 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(){ while(scanf("%d%d",&N,&T)==2 && (N||T)){ for(int i=0; i<=N; i++) sons[i].clear(); for(int i=1; i<=N; i++){ scanf("%d",&f); sons[f].push_back(i); } printf("%d\n",dp(0)); } }
时间: 2024-10-10 23:01:11