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_{even}\) 和 \(S_{odd}\) 分别表示深度为偶数或奇数的点的点权和,而 \(eps\) 表示波动,具体的值是绝对值小于 \(|S|\) 的整数。合法当且仅当这个值可以为 \(0\)。

考虑树的形态未定,那么每个点的深度奇偶性实质上可以任意钦定(只要奇偶都分别有点)。这相当于找到 \(S\) 的一个子集,使得

\[\sum_{k \in T} a_k - \sum_{k \in S \backslash T} a_k + eps = 0
\]

同时 \(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的更多相关文章

  1. 2015年第6本(英文第5本):Harry Potter 1 哈利波特与魔法石

    书名: Harry Potter 1 – Harry Potter and the Sorcerer’s Stone 作者:J.K. Rowling 单词数:7.8万 不重复单词数:6000(我怎么感 ...

  2. HDU 4771 Stealing Harry Potter's Precious

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  3. Interview-Harry Potter walk through matrix.

    假设你是harry potter,在grid的左上角,你现在要走到右下角,grid中有正数也有负数,遇到正数表示你的strength增加那么多,遇到负数表示strength减少那么多,在任何时刻如果你 ...

  4. Harry Potter

    Names appearing in "Harry Potter" 1.Harry Potter ①Harry is from Henry. ②Harry is related t ...

  5. hdu 4771 Stealing Harry Potter's Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

  6. hdu4771 Stealing Harry Potter's Precious

    注意--你可能会爆内存-- 假设一个直接爆搜索词-- 队列存储器元件被减少到-- #include<iostream> #include<map> #include<st ...

  7. Harry Potter and the Prisoner of Azkaban

    称号:Harry Potter and the Prisoner of Azkaban 作者:J.K. Rowling 篇幅: 448页 蓝思值:880L 用时:    11天 工具:  有道词典 [ ...

  8. 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 ...

  9. HDU3988-Harry Potter and the Hide Story(数论-质因数分解)

    Harry Potter and the Hide Story Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 ...

  10. 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 ...

随机推荐

  1. Excel—时间函数

    时间函数,学习之前先普及一个尝试,微软采用的是1900年纪念方式(数字1,代表的是1900年1月1日,数字1.5  代表的是1900年的1月1日的中午12:00,因为1.5正好是1天半的时间,而一天2 ...

  2. *args、**kwargs参数组

    '''def test(*args): # *agrs接收的是N个位置参数,不能接受关键字参数,转化成元祖 print(args)test(1,2,3,4,5,6)test(*[1,2,4,5,5]) ...

  3. e.target和this区别

    首先,this是指向当前事件所绑定的元素 e.target指向事件执行时所点击区域的元素, 易混淆点,当鼠标所点击的元素有子元素,e.target指向子元素,若没有,则和this一样指向事件所绑定的事 ...

  4. Flutter Web预览时白屏解决方法

    原因是因为运行 flutter run 是自动选择渲染器 桌面端WEB浏览器默认使用  CanvasKit渲染器 移动端WEB浏览器默认使用  HTML渲染器 问题就出在了CanvasKit渲染器,他 ...

  5. Python 时间日期获取(今天,昨天或者某一段时间)

    日常使用的时间函数: 昨天,或者N天的日期 import time def time_stamp(days): hours = int(days) t = time.strftime("%Y ...

  6. 狐漠漠养成日记 Cp.00003 第二周

    上一周整周都在做Unity Newbies Jam,除了一些必要的比如考试或者课程,其他的都推后了. 为了赶项目进度,这一周我可以说是废寝忘食,基本上每天一顿饭,就睡仨小时那种. 以至于到最后一天,也 ...

  7. 网络同步时钟单路耐压测试突破17V

    自动同步标准化考场时钟系统------专业LED时钟厂家![点击进入] 一.网络同步时钟耐压测试作用概述: 同步时钟耐压试验是鉴定时钟绝缘强度和稳定性最直接的方法,它对于判断NTP同步时钟设备能否投入 ...

  8. Linux_ZABBIX实战

    typora-copy-images-to: img ZABBIX实战 zabbix安装 Zabbix详解 zabbix中文社区: http://www.zabbix.org.cn/ Zabbix中文 ...

  9. oracle导入dmp

    通过impdp导入 1.sqlplus       (连接oracle数据库) 2.输入用户名密码3.create user abc identified by 123456;   (创建用户名为ab ...

  10. STM32任意引脚模拟IIC

    关于模拟I2C,任意接口都可模拟(未全部测试,可能存在特殊情况). 关于SDA_IN与SDAOUT:如下定义: 举例:#define MPU_SDA_IN() {GPIOA->CRL&= ...