Uva 12186 工人的请愿书
题目链接:https://uva.onlinejudge.org/external/121/12186.pdf
题意:
给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号。除了老板,每个人都有一个直接上司,没有下属的员工成为工人。
工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T%人递交请愿书后,该员工才会将请愿书递交给他的直接上级。输出能递交到老板处,最少需要多少工人写请愿书。
分析:
d(u) 表示让 u 放给上级的最优解, u 有 k 个子节点,那么至少需要 c = (k*T-1)/100 + 1个下属; (这里的数学公式很重要,刚开始我写的 k*T/100,是不对的,因为,如果k*T/100 = 5.5,那么需要6个下属,但是计算结果却是5,用(k*T-1)/100 + 1 则是5.49 + 1 = 6了,如果刚好整除,就是4.99 + 1 = 5了,符合至少 %T的要求) 然后状态转移就是最小的那 c 个下属。
#include <bits/stdc++.h>
using namespace std; #define maxn 100000 int n,T;
vector <int> sons[maxn]; int dp(int u) {
if(sons[u].size()==) return ; int k = sons[u].size(); vector<int> d;
d.clear(); for(int i=;i<k;i++) {
int v = sons[u][i];
d.push_back(dp(v));
} sort(d.begin(),d.end()); int ans = ;
int c = (k*T-)/+;
for(int i=;i<c;i++) {
ans+=d[i];
} return ans; } int main()
{
while(scanf("%d%d",&n,&T),n) { for(int i=;i<=n;i++)
sons[i].clear(); for(int i=;i<=n;i++) {
int u;
scanf("%d",&u);
sons[u].push_back(i);
} int ans = dp(); printf("%d\n",ans); } return ;
}
Uva 12186 工人的请愿书的更多相关文章
- UVa 12186 工人的请愿书(树形DP)
https://vjudge.net/problem/UVA-12186 题意: 一个老板和n个员工组成树状结构,每个员工都有自己的唯一上司,老板的编号为0,员工1~n,工人们打算签署一个志愿书给老板 ...
- UVA12186 工人的请愿书 Another Crisis (树形DP)
dp[i]表示要让i向上级发请愿书,最少需要多少个工人递交请愿书,因为要取前T%最小的,所以还要将i的子节点排序(这里用vector实现),取前c个最小的作为dp[i]的值. 这里用dfs可以省去dp ...
- UVA - 12186 Another Crisis(工人的请愿书)(树形dp)
题意:某公司有1个老板和n(n<=105)个员工组成树状结构,除了老板之外每个员工都有唯一的直属上司.老板的编号为0,员工编号为1~n.无下属的员工(叶子)打算签署一项请愿书递给老板,但不能跨级 ...
- 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 ...
- 题解 UVA12186 【工人的请愿书 Another Crisis】
俺太难了 记录一下我调了一个小时的错误 多测不清空 多测清空只清空了\(vector\) 多测全清空了,但是忘了清空\(vector[0]\) \(priority\)_ \(queue\)把\(gr ...
- UVa 12186 Another Crisis
题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T% ...
- UVa 12186 - Another Crisis(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 12186 Another Crisis (DP)
题意:有一个老板和n个员工,除了老板每个员工都有唯一的上司,老板编号为0,员工们为1-n,工人(没有下属的员工),要交一份请愿书, 但是不能跨级,当一个不是工人的员工接受到直系下属不少于T%的签字时, ...
- 紫书 例题 9-12 UVa 12186 (树形dp)
这道题还是比较简单的,对于当前节点,算出每个儿子需要的人数 然后再算出当前节点需要多少个人数,然后排个序加上去就好了. #include<cstdio> #include<vecto ...
随机推荐
- HashMap和HashTable区别
HashMap和HashTable区别 HashMap--->允许控制/线程安全 HashTable-->线程不安全
- ligerui_ligerTree_001_第一个“树”效果
折叠.展开.有复选框.没有复选框: 源码地址:http://download.csdn.net/detail/poiuy1991719/8571255 效果图: <%@ page languag ...
- 解决maven编译spark1.5报错问题
spark1.5发布了,赶紧去下了源码尝鲜 git clone git://github.com/apache/spark.git -b branch-1.5 输入命令进行编译 ./make-dist ...
- 夺命雷公狗mongodb之----mongodb---1---的下载,安装,连接
首先登录mongodb的官方网站即可进行下载: https://www.mongodb.com/download-center?jmp=nav#community 然后到wamp目录下创建一个mong ...
- ThinkPHP讲解(六)——添加数据
添加数据到数据库有三种方式 第一种:使用数组添加 $model=D("Info"); //实例化对象 //添加数据的第一种方式:使用数组添加 //要添加的数组,必须是关联数组,ke ...
- centos中的qt设计师所在的包
由于暂时用不到qt的ide,所以想把它卸了,经过一番查找,其所在的包名是: qt-devel
- Java高效编程之三【类和接口】
本部分包含的一些指导原则,可以帮助哦我们更好滴利用这些语言元素,以便让设计出来的类更加有用.健壮和灵活. 十二.使类和成员的访问能力最小化 三个关键词访问修饰符:private(私有的=类级别的).未 ...
- 【ubuntu】首选项和应用程序命令(preference & application)
gnome-control-center 系统设置 gnome-control-center region 键盘布局 gnome-control-center screen 屏幕 gno ...
- repeater做删除前弹窗询问
前台 <asp:LinkButton ID="delLinkButton" runat="server" OnClientClick='return co ...
- SQL2005中的事务与锁定(二)- 转载
------------------------------------------------------------------------ -- Author : HappyFlyStone ...