俺太难了

记录一下我调了一个小时的错误

  1. 多测不清空
  2. 多测清空只清空了\(vector\)
  3. 多测全清空了,但是忘了清空\(vector[0]\)
  4. \(priority\)_ \(queue\)把\(greater\)打成了\(less\)

佛枯了

题解

这题都告了是树了

可以很容易的想到一个贪心策略:

某节点的儿子数是\(a[i]\),则我们需要选\((a[i] * T - 1) / 100 + 1\)个子节点,那么现在这个节点的儿子数越少越好

另外,我们可以发现这题从根节点到子节点的时候不符合无后效性,举个栗子:

很显然选左边那棵子树是更优的,但是要是从上往下贪心的话我们就会选择右边的子树

所以我们只能从叶节点向根节点贪心

这个贪心我们用树上\(dp\)实现,用\(vector\)存图,用\(ans\)数组存选当前节点的话需要多少个叶节点

首先用\(vector\)存图,我们就能知道每个点的儿子的数量(不是子树大小),接着从根向下\(dfs\),顺手搞一个优先队列,回溯的时候顺带求出了\(ans\)数组,然后把\(ans\)数组放进优先队列,然后用前 \((a[i] * T - 1) / 100 + 1\) 小的子节点\(ans\)值更新当前点的\(ans\)值就可以了

代码如下

#include<bits/stdc++.h>
using namespace std;
#define rint register int
int n, T, ans[100010];
vector< int > a[100010];
inline int read( void ){
int re = 0, f = 1;
char ch = getchar();
while( ch > '9' || ch < '0' ){
if( ch == '-' ) f = -1;
ch = getchar();
}
while( ch <= '9' && ch >= '0' ){
re = re * 10 + ch - '0';
ch = getchar();
}
return re * f;
}
inline void dfs( int now, int fa ){
if( !a[now].size() ){
ans[now] = 1; return ;
}//边界条件
priority_queue< int, vector< int >, greater< int > > que;
for( rint i = 0; i < a[now].size(); i++ ){
rint v = a[now][i];
dfs( v, now );
que.push( ans[v] );//入队
}
int tmp = ( a[now].size() * T - 1 ) / 100 + 1;//需要工人的个数
for( rint i = 1; i <= tmp; i++ ){
int v = que.top(); que.pop(); ans[now] += v;
}
return ;
}
int main( void ){
while( 1 ){
n = read(); T = read();
for( rint i = 0; i <= n; i++ ) a[i].clear(); memset( ans, 0, sizeof( ans ) );
if( n == 0 && T == 0 ) break ;
for( rint i = 1; i <= n; i++ ){
int temp; temp = read();
a[temp].push_back( i );
}
dfs( 0, 0 );
cout << ans[0] << endl;
}
return 0;
}

题解 UVA12186 【工人的请愿书 Another Crisis】的更多相关文章

  1. UVA12186 工人的请愿书 Another Crisis (树形DP)

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

  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. 题解 洛谷P1281 【书的复制】

    蒟蒻的\(DP\)很菜,\(SO\)我准备上一套二分的玄学操作 一.简单的二分答案 二分主要是用来解决一些最值问题,它可以有效的优化暴力,使复杂度减少到\(O(logn)\). 我先给大家介绍一下二分 ...

  7. UVa 12186 Another Crisis

    题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T% ...

  8. UVA12186

    给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T%人递交请 ...

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

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

随机推荐

  1. Nginx笔记总结一:基本安装和配置

    1. Nginx安装 下载地址和安装依赖包 http://nginx.org/download/nginx-1.9.14.tar.gz yum -y install pcre pcre-devel z ...

  2. oracle12c 可行的解决办法:ORA-01017: invalid username/password; logon denied

    开启服务OracleServiceORCL和OracleOraDB12Home1TNSListener用Oracle SQL developer 连接测试报错:ORA-01017: invalid u ...

  3. 吴裕雄--python学习笔记:通过sqlite3 进行文字界面学生管理

    import sqlite3 conn = sqlite3.connect('E:\\student.db') print("Opened database successfully&quo ...

  4. POJ 2728 二分+最小生成树

    题意:给n个点,可以将每个点的x,y的欧几里得距离(就是坐标系里两点距离公式)看作距离,z的差值即为费用差,求的是所有最小生成树中的min(边费用和/边距离和). 思路:其实挑战P143有类似的列题, ...

  5. 利用Load命令将本地文本里面的数据导入到MySQL数据库

    摘要:在使用MySQL是我们可能会遇到要向我们的表中插入大量的数据如果都使用以下的语句在命令行输入有点不太切实际,幸好MySQL为我们提供了LOAD命令可以批量的从本地文件向MySQL表中导入数据! ...

  6. idea如何使用git

    1.安装好git(我下载的2.23.0版本百度网盘分享)  提取码  7ie1 2.配置git环境变量  Path   路径是你安装的git 目录下的bin目录   安装好后窗口命令输入git 可以测 ...

  7. H2O theme for Jekyll

    正如我在微博上所说的,使用Jekyll半年以来一直没有令我满意的主题模板,所以开始计划自己写一套好看又好用的主题模板.设计之初就明确了极简主义,风格采用扁平化了,通过卡片式设计来进行区块分明的布局,参 ...

  8. android 中webview的屏幕适配问题

    两行代码解决WebView的屏幕适配问题 一个简单的方法,让网页快速适应手机屏幕,代码如下 1 2 WebSettings webSettings= webView.getSettings(); we ...

  9. Gradle的依赖方式——Lombok在Gradle中的正确配置姿势

    写过java的都知道,lombok几乎在项目中处于不可或缺的一部分,但是lombok在Gradle的项目中配置并非人人都知道. 很多人在项目依赖中直接这样写 1 compile "org.p ...

  10. 微软发布MS MARCO数据集,提高计算机阅读理解能力

    ​ MARCO数据集,提高计算机阅读理解能力" title="微软发布MS MARCO数据集,提高计算机阅读理解能力"> ​ 本文译自:Microsoft data ...