UVA12186】的更多相关文章

题目链接:https://cn.vjudge.net/problem/UVA-12186 题意 给出n, T和一棵树,树上每个节点需要选择T%个直属子节点. 问根节点一共需要选择几个节点. 思路 思路很明显,直接写了. \[ dp[i]=\sum_{j \in Child(i)} minsort(dp[j]).head( \lceil kT/100 \rceil ) \] 需要非常注意的一点是复杂度问题. 发现还挺复杂,我们假设每个节点有k个直属子节点. 对于根节点,排序是这样的复杂度O(nlo…
给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T%人递交请愿书后,该员工才会将请愿书递交给他的直接上级.输出能递交到老板处,最少需要多少工人写请愿书 算法入门中树形动归的例题(学习中) temp = (k * T - 1)/100 + 1; 判断最少需要的人数 #include <iostream> #include <vector> #in…
题目大意:一家工厂,一个老板(编号为0),n个工人(编号1~n),其中,有的工人是中层领导,管辖一部分其他工人.现在大家要签署一份加薪申请书,但是按照规定不能越级上访,所以只能通过一层层的中间领导传到老板手中.当某个中间领导的手下签名员工人数达到 m% 时,他也会签上自己的名字.为确保申请书顺利到达老板手中,至少需要多少名员工签名. 题目分析:定义d(i)表示员工 i 将申请书传给上一级所需的最少签名人数.设k为i的“儿子”数目,则最少需要的签名人数为 c=(k*m-1)/100+1.所以dp(…
题目大意: 世界危机发生了,工人们请求加薪.一个老板和n个员工组成树状结构,每个员工都有自己的唯一上司,Boss的编号为0,员工1~n,工人们打算签署一个志愿书给老板,但无法跨级,当一个中级员工(非是工人的员工)的直属下属中不小于T%的人签字时,他也会签字并且递给他的直属上司,问:要让Boss收到请愿书至少需要多少个工人签字 /* 设d[u]表示让u给上级发信至少需要多少个工人.假设u有k个子节点,则至少需要C=(kT-1)100+1的直接下属发信才行.把所有的子节点的d值从小到大排序,前C个加…
一道简单的树形DP送给你. A couple of years ago, a new world wide crisis started, leaving many people with economical problems. Some workers of a particular company are trying to ask for an increase in their salaries. 数年以前,人们遭受了世界范围的经济危机.于是某司工人们要求涨薪.(我百度了一下,金融危机…
俺太难了 记录一下我调了一个小时的错误 多测不清空 多测清空只清空了\(vector\) 多测全清空了,但是忘了清空\(vector[0]\) \(priority\)_ \(queue\)把\(greater\)打成了\(less\) 佛枯了 题解 这题都告了是树了 可以很容易的想到一个贪心策略: 某节点的儿子数是\(a[i]\),则我们需要选\((a[i] * T - 1) / 100 + 1\)个子节点,那么现在这个节点的儿子数越少越好 另外,我们可以发现这题从根节点到子节点的时候不符合无…
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…
https://vjudge.net/problem/UVA-12186 题意: 一个老板和n个员工组成树状结构,每个员工都有自己的唯一上司,老板的编号为0,员工1~n,工人们打算签署一个志愿书给老板,但无法跨级,当一个中级员工(非是工人的员工)的直属下属中不小于T%的人签字时,他也会签字并且递给他的直属上司,问:要让老板收到请愿书至少需要多少个工人签字 思路: 设d(u)表示让u给上级发信最少需要多少个工人.假设u有k个子节点,则至少需要c=(k*T-1)/100+1个直接下属发信才行.把所有…