【POI每日题解 #8】DYN-Dynamite
你问蒟蒻为什么一天写两篇每日题解?
难道每日坚果你不能一天吃两包吗?
哇…这道题第一反应就是二分答案【太明显了
枚举答案 就那个“关键节点到这些点中距离的最小值的最大值”【蒟蒻读了好几遍……
若枚举到mid 则判定答案为mid时,覆盖所有特殊点的最少点数能否不超过m
嗯 这很点分治
对于一个子树 我们要处理到它里面没有没被覆盖的点
或者有到该子树根距离小于mid的【它可以放在以后解决
那什么时候要选点呢?
自然是上面两个条件都不满足的时候
也就是离子树根最远的未被覆盖特殊点到子树根的距离等于mid 【注意边权为一,大于就来不及了
所以对每棵子树存储它未被处理的最远特殊点的距离
注意到一个节点连接的两棵子树可以互相覆盖
并且覆盖所经过的路径必然经过当前节点
因此 记录到每个根节点距离最近的已选点的距离
至此 维护两个值 点分治得以完成
蒟蒻一开始没想到能A这道题 随便一写一交【当然这习惯很不好
就60了【facepalm 稍微debug下就A了……
但以后还是不要这么干…… 以此为戒
注意 对于1(根节点) 要进行特判
因为此时按点分治 到根节点距离小于mid的特殊点仍被保留
void dfs(int x, int fa){
d1[x] = sp[x] ? : -N; d2[x] = N;
for(int i = head[x]; i != -; i = edge[i].next){
int vv = edge[i].v;
if(vv == fa) continue;
dfs(vv, x);
if(d1[vv] != -N) d1[x] = max(d1[x], d1[vv] + );
d2[x] = min(d2[x], d2[vv] + );
}
if(d1[x] + d2[x] <= mid) d1[x] = -N;//!!!
if(d1[x] == mid){
tot++; d1[x] = -N; d2[x] = ;
}
if(sp[x] && d2[x] > mid)
d1[x] = max(d1[x], ); //!!!
}
inline bool check(){
tot = ;
dfs(, );
if(d1[] + d2[] > mid) tot++;//!!!
return tot <= m;
}
check
【POI每日题解 #8】DYN-Dynamite的更多相关文章
- 【POI每日题解 #7】TES-Intelligence Test
题目链接 这道题第一眼看去类比BANK-Cash Dispenser 不过1e6 * 1e6 = 1e12 分分钟MLE啊 想到优化 就yy到一种近似主席树的做法 来维护类似BANK的一堆序列 开 ...
- 【POI每日题解 #9】SKA-Piggy Banks
题目链接 题意: 有一棵环套树 求最少从多少个节点出发能沿边走过整棵树 环套树 并查集求联通块 有几块就砸几个 太简单不发代码了 不过某大佬的环套树找环dfs让我研究了好久… 贴一下以Orz #inc ...
- 【POI每日题解 #6】KRA-The Disks
题目链接 : [POI2006]KRA-The Disks 好有既视感啊... 注意一下输入输出 输入是从上到下输入箱子的宽度 输出是最上面的积木停在哪一层 即 箱子高度 - 积木高度 + 1 在初始 ...
- 【POI每日题解 #5】 DWU-Double-row
题目链接 [POI2005]DWU-Double-row wwwww 之前写了半小时 一卡机 没啦QAQ 简单说一下吧 [吐血ing 这道题长得好二分图啊 所以本能地连边 一种是A边 连可交换的数对 ...
- 【POI 每日题解 #4】 [POI2008]MAF-Mafia
[POI2008]MAF-Mafia 很容易看出是拓扑 但不容易想出来怎么做[可能是我太菜 首先 入度为零的人是肯定死不了的 接着 我们分成环和链分析 对于一个链 最多的情况就是顺着一个个开枪 最后剩 ...
- 每日题解: 两数之和 & 有效的括号
- [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)
[POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
- 每日温度(LeetCode Medium难度算法题)题解
LeetCode 题号739中等难度 每日温度 题目描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 ...
随机推荐
- Vue-Vue文本渲染三种方法 {{}}、v-html、v-text
{{ }} 将元素当成纯文本输出 v-htmlv-html会将元素当成HTML标签解析后输出 v-textv-text会将元素当成纯文本输出 代码: <!DOCTYPE html> < ...
- 截取字符串中最后一个中文词语(MS SQL)
有朋友需求一个问题,就是处理一张表中某一字段,从这个字段中去截取内容中最后一个中文词语. ID SourceText Result 1 张达:U:1杨英苹:U:1,周忱:U:1,;苗桥:U:1,章玮: ...
- 使用Topshelf管理Windows服务
目的:以控制台方式开发Windows服务程序,调试部署方便. https://www.cnblogs.com/itjeff/p/8316244.html https://www.cnblogs.com ...
- JAVA核心:内存、比较和Final
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- Web系统页面打印技术实现与分析
1 Web页面打印概述应用WEB化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于WEB的应用,客户端的规则很简单,容易学习,容易维护,容易发布.在WEB系统中,打印的确是个烦人的问题 ...
- jquery打印页面(jquery.jqprint)
使用jquery进行打印时,所需js包:jquery-1.4.4.min.js.jquery.jqprint-0.3.js 但如果使用高版本的jquery(jquery-1.9.1.min.js)时, ...
- 牛客OI周赛7-普及组
https://ac.nowcoder.com/acm/contest/372#question A.救救猫咪 #include <bits/stdc++.h> using namespa ...
- [书摘]Windows内存管理术语
1. Virtual Address space 虚拟地址空间 一个应用程序能够访问的最大的内存地址空间, 32位的机器上面最大的就是4GB 但是 并不是所有的内存都放到主存里面, 可能放到pagef ...
- auto_increment 自增键的一些说明
导致auto_increment变小的几种情况: 1. alter table xx auto_increment = yy; 2. truncate table 3. restart mysql 第 ...
- 使用ssh tunnel 来做代理或跳板
接前文 http://www.cnblogs.com/piperck/p/6188984.html 使用ssh config配置文件来管理ssh连接 前文说了如何配置自己的ssh config 来方 ...