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 ...
随机推荐
- SQL 查询各表所占大小
SELECT OBJECT_NAME(id) tablename , CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) ...
- 学PHP的第二天!
这是我学PHP的第二天,我改了一些代码,终于把我喜欢的OJ网站的默认模板给改掉了,竟然能用!!!我从来都没有这么的欣喜过,看来PHP果真是一门非常好用的编程语言,但这个OJ有些用的是python的模块 ...
- 访问提示'staticfiles' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache i18n l10n log static tz
解决方法 前端模板中{% load staticfiles %}都修改为{% load static %} 因为在django3.x中这部分做了修改,前者无法识别,只能用后者
- mangodb查询语句
1.查询所有记录 db.userInfo.find(); 相当于: select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据.注意:键 ...
- 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class com.titan.extend.SpringContextLoaderListener
08-Jun-2022 10:05:21.119 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardConte ...
- FATAL Exited too quickly (process log may have details)的解决方案
作为一个混混的开发,不会啥容器操作.所以一般都是用supervisor来管理一些运行的进程 用了一段时间还是比较好用的,这个软件也是用的Python开发. 但在使用的过程中,status时会出现 FA ...
- Hadoop编程——Java编写MapReduce:WordCount案例
一.MapReduce简介 MapReduce是一种面向大数据平台的分布式并行计算框架,它允许使用人员在不会分布式并行编程的情况下,将程序运行在分布式系统上.它提供的并行计算框架,能自动完成计算任务的 ...
- windows根据文件名找到进程,并杀死进程。
背景:最近因为工作原因,装了360杀毒引擎,完了就卸载了.发现一直提示文件正在使用无法删除.文件无法访问等等.经过一系列操作,安全模式下都无法删除,恶心死了... 1.shirt + del 按文件夹 ...
- node后台项目所需中间件梳理
0.nodemon 全局工具,监听项目文件变动,并自动重启项目 一.node内置模块 1.fs fs.readFile() 读取指定文件中的内容fs.writeFile() 向指定的文件中写入内容 ...
- SQL Server 错误:特殊符号“•”导致的sql查询问题
问题描述: 对于一些标题或字符串,例如: 如果导入数据库,就会发现会自动变成?号了: 在进行SQL查询的时候,会出现一个同一条sql语句在mysql直接执行sql可以查询到,但是mssql进行查询的时 ...