CF1286F Harry The Potter
CF1286F Harry The Potter
首先答案上界为 \(n\),就是对每个点用一次操作 1。
那么我们现在的思维模式就是利用操作 2 来减少操作 1 的次数。
不难发现,如果操作 2 的点之间连无向边形成了环,那么可以对环上每个点用一次操作 1,这样这些操作 2 是不优的。
也就是说,接下来操作 2 的点形成了森林的形式,假设有 \(k\) 棵树,那么总操作数就是 \(n - k\),所以现在我们只需最大化树的数量。
由于数据范围很小,这里可以想到先把合法的树找出来,然后子集卷积暴力合并,这样是 \(O(3^n)\) 的。
考虑如何判定一个集合 \(S\) 能否形成一棵合法的树,也就是可以通过 \((|S| - 1)\) 次操作 2 把集合里的数归零。
先考虑如果已经知道了树的形态如何判定,考虑这样一种钦定操作顺序:从叶子开始操作到根节点一共 \((|S| - 1)\) 次,每次对当前归零的点的父亲有 \(\plusmn 1\) 的波动,这个波动会一直影响到根节点,手玩算一下贡献发现根节点最后的值为
\]
这里 \(S_{even}\) 和 \(S_{odd}\) 分别表示深度为偶数或奇数的点的点权和,而 \(eps\) 表示波动,具体的值是绝对值小于 \(|S|\) 的整数。合法当且仅当这个值可以为 \(0\)。
考虑树的形态未定,那么每个点的深度奇偶性实质上可以任意钦定(只要奇偶都分别有点)。这相当于找到 \(S\) 的一个子集,使得
\]
同时 \(T \neq \varnothing\) 且 \(T \neq S\)。
这玩意直接判是 \(O(3^n)\) 的,而且跑得比较慢,过不了,那么就考虑优化。
不难发现集合 \(S\) 中的每个数都有 \(\plusmn a_k\) 的贡献,发现可以折半,把集合分成两部分,分别维护两个子集的和并排序,接下来可以用一个指针扫第一个子集,那么第二个子集中合法的部分就是区间的形式,可以线性维护。这部分复杂度就是 \(O(\sum_{k=1}^n \binom{n}{k}2^{\frac{k}{2}}) = O((1+\sqrt{2})^n)\) 的了。
接下来的那个子集卷积虽然也是 \(O(3^n)\) 的,但是只从极小的树处转移,常数非常小。
不过还有更高明的做法(虽然跑不过暴力),就是考虑若答案是 \(p\),做 \((p+1)\) 次子集卷积后会变成全部 \(0\),因为一次子集卷积相当于把两个森林合并,利用这个性质可以倍增求 \(p\),复杂度是 \(O(n^2 2^n \log n)\)。
CF1286F Harry The Potter的更多相关文章
- 2015年第6本(英文第5本):Harry Potter 1 哈利波特与魔法石
书名: Harry Potter 1 – Harry Potter and the Sorcerer’s Stone 作者:J.K. Rowling 单词数:7.8万 不重复单词数:6000(我怎么感 ...
- HDU 4771 Stealing Harry Potter's Precious
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- Interview-Harry Potter walk through matrix.
假设你是harry potter,在grid的左上角,你现在要走到右下角,grid中有正数也有负数,遇到正数表示你的strength增加那么多,遇到负数表示strength减少那么多,在任何时刻如果你 ...
- Harry Potter
Names appearing in "Harry Potter" 1.Harry Potter ①Harry is from Henry. ②Harry is related t ...
- hdu 4771 Stealing Harry Potter's Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
- hdu4771 Stealing Harry Potter's Precious
注意--你可能会爆内存-- 假设一个直接爆搜索词-- 队列存储器元件被减少到-- #include<iostream> #include<map> #include<st ...
- Harry Potter and the Prisoner of Azkaban
称号:Harry Potter and the Prisoner of Azkaban 作者:J.K. Rowling 篇幅: 448页 蓝思值:880L 用时: 11天 工具: 有道词典 [ ...
- HDU 3988 Harry Potter and the Hide Story(数论-整数和素数)
Harry Potter and the Hide Story Problem Description iSea is tired of writing the story of Harry Pott ...
- HDU3988-Harry Potter and the Hide Story(数论-质因数分解)
Harry Potter and the Hide Story Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 ...
- Harry Potter and J.K.Rowling(半平面交+圆和矩形交)
Harry Potter and J.K.Rowling http://acm.hdu.edu.cn/showproblem.php?pid=3982 Time Limit: 2000/1000 MS ...
随机推荐
- GPS时钟装置,北斗卫星授时,ntp校时服务器,网络时间服务器
GPS时钟装置,北斗卫星授时,ntp校时服务器,网络时间服务器 一.GPS时钟装置产品特点:技术交流-岳峰 15901092122:Q522508213 GPS时钟装置是针对计算机.自动化装置等进行校 ...
- OSI网络七层模型简明教程
如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大.OSI 是 Open System Interconnection 的缩写,译为"开放式系统互联& ...
- flutter TextField 高度问题(包括使用maxlines自适应高度以及改变textfield组件自定义高度)
先上代码. Container( color: Colors.blue, constraints: BoxConstraints( minHeight: 10, maxHeight: 20 ), ch ...
- python编程中的if __name__ == 'main': 的作用
python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行. 因此if __name__ == 'main': 的作用就是控制这两种 ...
- Jenkins启动失败的七个问题
1.jdk版本和路径问题(注意第6个问题) which java vim /etc/init.d/jenkins 2.用户名问题 查看/etc/sysconfig/jenkins的JENKINS_US ...
- linux 中的errno 和 strerror(errno)
1. errno.h 中包含 errno 这个错误保存值 string.h 包含 strerror() 函数 ,它的原型 是 char *strerror(int errnum); 输入值应该是err ...
- 【python】绘图,颜色,线型
颜色 最好用的:在网站上找到对应使用十六进制RGB/RGBA字符串表示颜色 可以看颜色及其对应色号名称:https://xkcd.com/color/rgb/ 参考:matplotlib指定绘图颜色的 ...
- Java Collection体系
Collection 接口 宏观图 快速使用 import java.util.*; public class Demo { public static void main(String[] args ...
- vue3 ts vite
npm init vite@latest npm install -D sassnpm i vantnpm i vite-plugin-style-import@1.4.1 -Dvite.config ...
- 【python】第一模块 步骤五 第一课、内存管理机制
第一课.内存管理机制 一.课程介绍 1.1 课程概要 课程概要 赋值语句的内存分析 垃圾回收机制 内存管理机制 课程目标 掌握赋值语句内存分析方法 掌握id()和is()的使用 了解python的垃圾 ...