UVa 12186 - Another Crisis(树形DP)

时间:2022-09-07 17:20:34

链接:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3338

题意:

某公司里有一个老板和n(n≤1e5)个员工组成树状结构,除了老板之外每个员工都有唯一的直属上司。
老板的编号为0,员工编号为1~n。工人们(即没有直接下属的员工)打算签署一项请愿书递给老板,
但是不能跨级递,只能递给直属上司。当一个中级员工(不是工人的员工)的直属下属中不小于T%的人签字时,
他也会签字并且递给他的直属上司。问:要让公司老板收到请愿书,至少需要多少个工人签字?

分析:

设d(u)表示让u给上级发信最少需要多少个工人。假设u有k个子结点,则至少需要c=(kT-1)/100+1个直接下属发信才行。
把所有子结点的d值从小到大排序,前c个加起来即可。最终答案是d(0)。

代码:

 #include <cstdio>
#include <vector>
#include <algorithm>
using namespace std; int T;
vector<int> son[(int)1e5+]; int dp(int f){
if(son[f].empty()) return ;
vector<int> b;
for(int i = ; i < son[f].size(); i++) b.push_back(dp(son[f][i]));
sort(b.begin(), b.end());
int n = (T * son[f].size() - ) / + , res = ;
for(int i = ; i < n; i++) res += b[i];
return res;
} int main(){
int n;
while(scanf("%d%d", &n, &T) && n){
for(int i = ; i <= n; i++) son[i].clear();
for(int f, i = ; i <= n; i++){
scanf("%d", &f);
son[f].push_back(i);
}
printf("%d\n", dp());
}
return ;
}

UVa 12186 - Another Crisis(树形DP)的更多相关文章

  1. UVa 12186 Another Crisis (DP)

    题意:有一个老板和n个员工,除了老板每个员工都有唯一的上司,老板编号为0,员工们为1-n,工人(没有下属的员工),要交一份请愿书, 但是不能跨级,当一个不是工人的员工接受到直系下属不少于T%的签字时, ...

  2. UVa 10859 - Placing Lampposts 树形DP 难度&colon; 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  3. UVA - 1218 Perfect Service&lpar;树形dp&rpar;

    题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...

  4. UVa 1292 - Strategic game &lpar;树形dp&rpar;

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...

  5. Uva LA 3902 - Network 树形DP 难度&colon; 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  6. UVa 12093 Protecting Zonk &lpar;树形DP&rpar;

    题意:给定一个有n个节点的无根树,有两种装置A和B,每种都有无限多个.在某个节点X使用A装置需要C1的花费,并且此时与节点X相连的边都被覆盖.在某个节点X使用B装置需要C2的花费,并且此时与节点X相连 ...

  7. UVA 10859 Placing Lamppost 树形DP&plus;二目标最优解的求解方案

    题意:给定一个无向,无环,无多重边,要求找出最少的若干点,使得,每条边之中至少有一个点上有街灯.在满足上述条件的时候将还需要满足让两个点被选择的边的数量尽量多. 题解: 对于如何求解最小的节点数目这点 ...

  8. UVA - 12186 Another Crisis (树形DP)

    思路:dp[i]表示让上司i签字至少需要多少工人签字.       转移方程:将i的所有节点根据所需工人数量升序排序,设i需要k个下属签字,dp[i] = sum{dp[v]| 0 <= v & ...

  9. UVA - 12186 Another Crisis&lpar;工人的请愿书&rpar;&lpar;树形dp&rpar;

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

随机推荐

  1. 三天没有写题了,罪过!--Hash Table Start

    (1)Island Perimeter 解题思路: 在矩阵上循环并记录岛(1)的个数;如果当前节点是岛,则检查其是否具有任何右邻居或下邻居,有的话邻居计数加1 ;岛的周长结果为islands * 4 ...

  2. iOS开发---iPhone SDK 包含哪些东西?

    第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就 ...

  3. 笔试题&amp&semi;amp&semi;面试题:找出一个数组中第m小的值并输出

    题目:找出一个数组中第m小的值并输出. 代码: #include <stdio.h> int findm_min(int a[], int n, int m) //n代表数组长度,m代表找 ...

  4. 房费制 它 结账BUG

    声明:以下内容仅仅是对在桌子上的卡与卡表的后面,适合学生的表!     最近,我们已经开始做VB.NET系统重构版,在这里跟大家聊聊我在机房收费系统中发现的漏洞. 在机房收费系统中有这样一个窗口--结 ...

  5. 直接编译caffe出现的两个问题

    工控机的环境之前已经配置好ubuntu14.04+CUDA7.5+cuDNN v4,再加opencv3.1.要用ResNet做分类,需要重新编译一个caffe框架.下载BVLC/caffe,接着修改M ...

  6. 如何解决testng执行用例失败自动重跑问题

    注: 以下内容引自 http://blog.csdn.net/MenofGod/article/details/72846649 看过几个相关问题的帖子,内容类似,不过这篇解决问题的步骤和代码比较清晰 ...

  7. yum clear all无反应

    卸载重装yum 操作系统版本:centos7 [root@linux-node3 ~]# uname -r 3.10.0-514.el7.x86_64 一.将现有的yum源卸载 [root@linux ...

  8. oracle修改日期格式

    查看默认的日期格式 select * from v$nls_parameters; 更改 alter session | system (范围) set xxxx=“yyyy-mm-dd” ;

  9. 转:【专题九】实现类似QQ的即时通信程序

    引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在 ...

  10. Java结束线程的三种方法&lpar;爱奇艺面试&rpar;

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...