返回顶部
大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

Another Crisis UVA - 12186

一道很水的题

树形dp

题目连接 https://vjudge.net/problem/UVA-12186

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5+10;

vector<int> son[maxn];

int n,t;

int dfs(int u) {
    if(son[u].empty()) return 1;
    int k=son[u].size();
    vector<int> d;
    for(int i=0;i<k;i++)
    d.push_back(dfs(son[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)) {
        for(int i=0;i<=n;i++) son[i].clear();
        if(n==0&&t==0) break;
        for(int i=1;i<=n;i++) {
            int fa;scanf("%d",&fa);
            son[fa].push_back(i);
        }
        printf("%d\n",dfs(0));
    }
    return 0;
}
View Code

 

posted @ 2019-05-17 09:49  plysc  阅读(119)  评论(0编辑  收藏  举报