dp[i]表示要让i向上级发请愿书,最少需要多少个工人递交请愿书,因为要取前T%最小的,所以还要将i的子节点排序(这里用vector实现),取前c个最小的作为dp[i]的值。

这里用dfs可以省去dp数组,用返回值的方式实现。

 1 #include<cstdio>
2 #include<cstring>
3 #include<vector>
4 #include<algorithm>
5 #include<stdlib.h>
6 #include<iostream>
7 #include<cmath>
8 using namespace std;
9 int n,t;
10 vector<int> E[100005];
11
12 int dfs(int u){//用返回值的方式,省略dp数组
13 if(E[u].size()==0) return 1;//工人
14 int k=E[u].size();
15 vector<int> d;//用于排序
16 for(int i=0;i<k;i++)
17 d.push_back(dfs(E[u][i]));
18 sort(d.begin(),d.end());
19 int ans=0,c=ceil(k*t/100.0);//至少收到c个,才会再向上提交
20 for(int i=0;i<c;i++) ans+=d[i];
21 return ans;
22 }
23
24 int main(){
25 while(scanf("%d%d",&n,&t)!=EOF&&n!=0&&t!=0){
26 for(int i=0;i<=n;i++) E[i].clear();
27 for(int i=1;i<=n;i++){
28 int x;
29 scanf("%d",&x);
30 E[x].push_back(i);//老板向直接下属连边
31 }
32 printf("%d\n",dfs(0));
33 }
34 return 0;
35 }

UVA12186 工人的请愿书 Another Crisis (树形DP)的更多相关文章

  1. 题解 UVA12186 【工人的请愿书 Another Crisis】

    俺太难了 记录一下我调了一个小时的错误 多测不清空 多测清空只清空了\(vector\) 多测全清空了,但是忘了清空\(vector[0]\) \(priority\)_ \(queue\)把\(gr ...

  2. Uva 12186 工人的请愿书

    题目链接:https://uva.onlinejudge.org/external/121/12186.pdf 题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板, ...

  3. UVA - 12186 Another Crisis(工人的请愿书)(树形dp)

    题意:某公司有1个老板和n(n<=105)个员工组成树状结构,除了老板之外每个员工都有唯一的直属上司.老板的编号为0,员工编号为1~n.无下属的员工(叶子)打算签署一项请愿书递给老板,但不能跨级 ...

  4. UVa 12186 工人的请愿书(树形DP)

    https://vjudge.net/problem/UVA-12186 题意: 一个老板和n个员工组成树状结构,每个员工都有自己的唯一上司,老板的编号为0,员工1~n,工人们打算签署一个志愿书给老板 ...

  5. UVa 12186 Another Crisis 工人的请愿书

    c表示某上司上报的最少请愿下属,k表示总下属c=0.01T*k=kT/100(0.01T*k是整数)c=[0.01T*k]+1=[kT/100]+1(0.01T*k不是整数) kT=100 c=1 k ...

  6. UVA-12186 Another Crisis 树形dp

    题目链接:https://cn.vjudge.net/problem/UVA-12186 题意 给出n, T和一棵树,树上每个节点需要选择T%个直属子节点. 问根节点一共需要选择几个节点. 思路 思路 ...

  7. 【学时总结】◆学时·VIII◆ 树形DP

    ◆学时·VIII◆ 树形DP DP像猴子一样爬上了树……QwQ ◇ 算法概述 基于树的模型,由于树上没有环,满足DP的无后效性,可以充分发挥其强大统计以及计算答案的能力. 一般来说树形DP的状态定义有 ...

  8. bzoj 2286(虚树+树形dp) 虚树模板

    树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 5002  Sol ...

  9. UVa12186:Another Crisis(树形DP)

    一道简单的树形DP送给你. A couple of years ago, a new world wide crisis started, leaving many people with econo ...

随机推荐

  1. 【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)

    文章有点长,耐心看完应该可以懂实际原理到底是啥子. 这是一个KV数据库的C#实现,目前用.NET 6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期. 当然,这个其实也算是NoSQL ...

  2. ExpressionChangedAfterItHasBeenCheckedError详细解释

    一个angular组件,他的生命周期是这样的 update bound properties for all child components/directives call ngOnInit, On ...

  3. windows版本rabbitmq安装及日志level设置

    1.DirectX Repair 安装缺失的C++组件,不安装缺失的组件会造成第二部安装erl文件夹缺少bin文件夹2.安装otp_win64_23.1 1.配置 ERLANG_HOME:地址为Erl ...

  4. js屏蔽浏览器默认事件

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. odoo14 重启服务后权限不见了

    1 Odoo14权限更新有两个地方: 2 一.你在编写xml权限记录的时候没有将noupdate设置为'1'这样导致你每次升级模块,你的权限都会重置一遍. 3 二.你在运行odoo-bin服务的时候, ...

  6. MODBUS转PROFINET网关将电力智能监控仪表接入PROFINET网络案例

    本案例控制的主要对象是变送器的显示与报警.系统主PLC 选用西门子CPU,通过小疆智控MODBUS 转 PROFINET网关GW-PN5001采集IM300电力智能监控仪数据. 1.首先加入 GSD ...

  7. C++ 练气期之函数探幽

    1. 函数基础 一个C++程序中,往往需要包含若干个函数,可以说函数是C++程序的基础组成元件,是程序中的头等公民. 如果要理解程序中使用函数的具体意义,则需要了解语言发展过程中致力要解决的 2 问题 ...

  8. Win10使用fvm管理多个Flutter版本

    Win10使用fvm管理多个Flutter版本 参考:https://blog.csdn.net/PyMuma/article/details/115298645 1.升级Flutter 由于现在的f ...

  9. DolphinScheduler 新晋 Committer 成员啦

    Apache DolphinScheduler在2021年的3月18号正式成为 Apache 顶级项目后,就又迎来了好消息,经过Apache DolphinScheduler PMC们的推荐和投票, ...

  10. LuoguP5022 旅行 (割点,基环树)

    // luogu-judger-enable-o2 #include <cstdio> //#include <iostream> #include <cstring&g ...