UVa 12186 工人的请愿书(树形DP)】的更多相关文章

题目链接:https://uva.onlinejudge.org/external/121/12186.pdf 题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T%人递交请愿书后,该员工才会将请愿书递交给他的直接上级.输出能递交到老板处,最少需要多少工人写请愿书. 分析: d(u) 表示让 u 放给上级的最优解, u 有 k 个子节点,那么至少需要…
https://vjudge.net/problem/UVA-12186 题意: 一个老板和n个员工组成树状结构,每个员工都有自己的唯一上司,老板的编号为0,员工1~n,工人们打算签署一个志愿书给老板,但无法跨级,当一个中级员工(非是工人的员工)的直属下属中不小于T%的人签字时,他也会签字并且递给他的直属上司,问:要让老板收到请愿书至少需要多少个工人签字 思路: 设d(u)表示让u给上级发信最少需要多少个工人.假设u有k个子节点,则至少需要c=(k*T-1)/100+1个直接下属发信才行.把所有…
题意:某公司有1个老板和n(n<=105)个员工组成树状结构,除了老板之外每个员工都有唯一的直属上司.老板的编号为0,员工编号为1~n.无下属的员工(叶子)打算签署一项请愿书递给老板,但不能跨级递,只能递给直属上司.当一个中级员工(非叶子)的直属下属中不小于T%的人签字时,他也会签字并且递给他的直属上司.问:要让公司老板收到请愿书,至少需要多少个工人签字? 分析: 1.dfs(u)表示让u给上级发信最少需要多少个工人. 2.需要在u的孩子结点中选择不小于T%的人数,这些人所需的工人签字越少越好,…
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…
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 kT=101 c=2 因此c=[(kT-1)/100]+1 #include<cstdio> #include<vector> #include<algorithm> using namespace std; int n,t,ans; vector<]; int dp(…
A Scheduling Problem   Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_mark>, to be scheduled. Each job needs one day to complete. Your task is to schedule the jobs so that they can be nished in a minimum number of days. Th…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3661 题意: 公司里有n(n≤200)个人形成一个树状结构,即除了老板之外每个员工都有唯一的直属上司.要求选尽量多的人,但不能同时选择一个人和他的直属上司.问:最多能选多少人,以及在人数最多的前提下方案是否唯一. 分析: 本题几乎就是树的最大独立集问题,不过多了一个要求:判断唯一性…
俺太难了 记录一下我调了一个小时的错误 多测不清空 多测清空只清空了\(vector\) 多测全清空了,但是忘了清空\(vector[0]\) \(priority\)_ \(queue\)把\(greater\)打成了\(less\) 佛枯了 题解 这题都告了是树了 可以很容易的想到一个贪心策略: 某节点的儿子数是\(a[i]\),则我们需要选\((a[i] * T - 1) / 100 + 1\)个子节点,那么现在这个节点的儿子数越少越好 另外,我们可以发现这题从根节点到子节点的时候不符合无…
题意:公司有 n 个人形成一个树形结构,除了老板都有唯一的一个直系上司,要求选尽量多的人,但不能同时选一人上和他的直系上司,问最多能选多少人,并且是不是唯一的方案. 析:这个题几乎就是树的最大的独立集问题,只不过多一个判断唯一性而已.用两个数组,一个用来记录人数,一个用来判断唯一性. d[u][0],表示以 u 为根的子树中,不选 u 点能够得到最大人数,那么d[u][1]就是选 u 点能达到最大人数. f[u][0]类似,表示以 u 为根的子树中,不选 u 点是否唯一,那么f[u][1]就是选…
和Heroes Of Might And Magic 相似,题目的询问是dp的一个副产物. 距离是不好表示成状态的,但是可以换一个角度想,如果知道了从一个点向子树走k个结点的最短距离, 那么就可以回答走x距离能访问到的最大结点数量. 当访问了一棵子树,想要访问子树外的结点时,一定要先从子树的根结点出来. 状态可以定义为dp[u][k][?],u表示根节点,k表示访问u的k个子结点,?的取值为0和1表示 不回到u 和 回到u. 不难想到转移过程: dp[u][k][0] <- dp[u][a][1…