[杂题]URAL1822. Hugo II's War
看懂题意的请直接跳过下一坨! 本人有表达障碍!
==========================================
题意: (题意真的很难很难懂啊!!! 去他娘的**)
有一个王国,王国里有一个国王(编号为1),他有(编号为2~n) n-1个臣子(这些臣子并不全和他有直接关系)
然后呢 国王要去打架,但是只有当他的x%个及以上的直系下属(与他有直接关系的臣子)做好打架的准备了,他才能去打架
他的直系下属也有下属,也要其中x%及以上的下属做好打架准备了,那些直系下属才会开始准备打架...直到最后一层下属(也就是没有下属的那些人)他们会直接开始准备打架
当然 (除了国王)所有臣子准备打架都需要时间$t_i$;
有一个上限时间T 臣子们准备的总时间不能超过T
给的是n(包括国王 共n个人(国王加臣子)),T
接下来是编号2~n的臣子们的信息(1号是国王) $p_i$和$t_i$
$p_i$代表该臣子是 编号为pi的人 的下属
$t_i$代表该臣子 准备打架需要的时间
问的是: 不超过T的情况下,准备战斗的臣子要尽量多,求x的最大值
是不是看了这么大一坨还是不知道讲什么...
那么我们来看个案例:
6 3
1 2
2 2
2 1
1 2
1 4 n=6 T=3 就是1个国王 5个臣子 臣子们要在3单位时间内准备好打架
接着
2号:1 2
3号:2 2
4号:2 1
5号:1 2
6号:1 4 他们的关系图是这样的:
这些人中 3、4、5、6都是没有下属的 因此都可以直接开始准备打架
如果x是100,那么就是需要100%以上的下属完成准备,也就是当3、4完成2才能开始 ;当2、5、6完成1才能去打架
(3、4、5、6同时开始准备,3、4都完成过去了2天, 也就是第三天2可以开始准备(此时5也完成了),然后过了4天2、5、6都完成,1就可以去打架了,所以x==100时总共用了4天)
如果x是50,那么就是需要50%以上的下属完成准备,也就是当3或4完成 2才能开始 ;当2、5、6中有2个人(ceil(3/2)=2)完成 1才能去打架
(3、4、5、6同时开始准备,第一天结束4完成,此时已经满足“2号的50%及以上的下属完成”,于是2开始准备,第2天结束,2准备完成,此时5也完成了,这样就满足了“1号的50%及以上的下属完成”,1就可以去打架了,所以x==50时总共用了2天)
题目的上限T==3也就是必须要在3天内完成准备 显然x==100的时候需要4天不满足,而x==50的时候需要2天,满足。
=================================================
呃 到这里 才讲完题目...
好了 那么怎么做呢?
我们先倒着思考,要是我们已知x(百分比),继而来判断能不能满足“准备天数<=上限天数T”的条件 是不是就简单了很多呢,只要傻傻的相加就好了呢o(^▽^)o
好 那么我们就来枚举每一个百分比能不能满足条件 然后找个最大的!
浮点误差是$10^{-4}$那么0到100就总共$10^6$个情况,然后每个情况都要判断,最坏要加$10^4$次(n上限$10^4$)
那么就是O($10^4 \times 10^6$),Time Limit:500ms
啊哦不够额 ( ̄▽ ̄)
那就二分呗~~上下限分别是0和100,结束的条件就是 fabs(l-r)<$10^{-4}$ 咯~~
然后就结束了...
然后一交WA *****
坑爹的居然要LL
时间上限T明明只有$10^6$,$t_i$明明只有100,$10^4$个100加起来也才$10^6$嘛!为什么要LL!
对啊!!写这么大一坨就是为了吐槽一个LL啊!
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps=1e-; vector<LL> son[], tmp, tot;
int a[];
LL sum[]; int main()
{
int n, t;
scanf("%d%d", &n, &t);
for(int i=;i<=n;i++)
{
int x;
scanf("%d%d",&x,&a[i]);
son[x].push_back(i);
}
a[]=;
double l=, r=, ans;
while(fabs(l-r)>=eps)
{
double m=(l+r)/2.0;
memset(sum, -, sizeof(sum));
tmp.clear();
tmp.push_back();
while(!tmp.empty())
{
int p=tmp[tmp.size()-];
if(!son[p].size())
sum[p]=a[p], tmp.pop_back();
else
{
if(sum[son[p][]]==-)
{
for(int i=;i<son[p].size();i++)
tmp.push_back(son[p][i]);
continue;
}
tot.clear();
for(int i=;i<son[p].size();i++)
tot.push_back(sum[son[p][i]]);
sort(tot.begin(), tot.end());
int pp;
for(int i=;i<son[p].size();i++)
if((i+)*100.0/son[p].size()>=m)
{
pp=i;
break;
}
sum[p]=tot[pp]+(LL)a[p];
tmp.pop_back();
}
}
if(sum[]<=t)
ans=m, l=m;
else
r=m;
}
printf("%.7lf\n", ans);
return ;
}
URAL 1822
[杂题]URAL1822. Hugo II's War的更多相关文章
- URAL 1822. Hugo II's War 树的结构+二分
1822. Hugo II's War Time limit: 0.5 second Memory limit: 64 MB The glorious King Hugo II has declare ...
- 乘风破浪:LeetCode真题_040_Combination Sum II
乘风破浪:LeetCode真题_040_Combination Sum II 一.前言 这次和上次的区别是元素不能重复使用了,这也简单,每一次去掉使用过的元素即可. 二.Combination Sum ...
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
- wangkoala杂题总集(根据个人进度选更)
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- 【python】Leetcode每日一题-反转链表 II
[python]Leetcode每日一题-反转链表 II [题目描述] 给你单链表的头节点 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 ...
随机推荐
- 页面javascript 和jquery 的一些用法
confirm:提交之前的提示验证 if(confirm("确认是否提交?")){ alert("确认提交..."); } input按钮的禁用: $(&quo ...
- SQL Server 2012 中 Update FROM子句
首先说明一下需求以及环境 创建Table1以及Table2两张表,并插入一下数据 USE AdventureWorks2012; GO IF OBJECT_ID ('dbo.Table1', 'U') ...
- C# 打印多页tif
注意点: 1.计算image对象总页数 image.GetFrameCount(FrameDimension.Page); 2.初始化当前页,并获取指定页内容 image.SelectActiveFr ...
- 【html】【18】高级篇--下拉列表[竖向手风琴]
下载: http://sc.chinaz.com/jiaoben/141027501240.htm html: <!DOCTYPE html> <html> <head ...
- eclipse4.2.1插件安装(二)之Eclipse HTML Editor
编辑一些页面文件,例如JSP,HTML,JS等,直接用内置的文本编辑器基本比较疯狂,自己选了一个顺手的编辑器,Eclipse HTML Editor! Eclipse HTML编辑器插件主要提供以下功 ...
- android测试的相关概念以及单元测试
1.测试的相关概念 1.根据是否知道源代码分类: 黑盒测试: a - b - c 边值测试 白盒测试: 根据源代码写测试方法 或者 测试用例; 2.根据测试的粒度分类: 方法测试:写完一个方 ...
- OpenJudge 2773 2726 2727 采药
1.链接地址: http://bailian.openjudge.cn/practice/2773/ http://bailian.openjudge.cn/practice/2726/ http:/ ...
- yiic创建YII应用 "php.exe"不是内部或外部命令 解决办法
第一步:运行CMD命令. 第二步:进入Yiic文件的目录 (例如在D盘里面 D:/yii/framework) 第三步:D:\yii\framework>yiic webapp D: ...
- 网页中"IE限制网页访问脚本或ActiveX控件"的提示问题的解决方法
以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...
- STM32F407移植contiki2.6后使用LWIP库实现tcp client
最近在做智能家居,物联网项目,用到了C下的contiki移植 经过一阵调试,终于在 STM32F407移植contiki2.6后使用LWIP库实现tcp client. 一路艰辛谁人知道....唯有留 ...