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. YML Exception 以及 java.nio.charset.MalformedInputException: Input length = 1

    在springboot项目中,第一次遇到的问题是 YML Exception java.nio.charset.MalformedInputException: Input length = 1 ,此 ...

  2. TMP_InputField 理解

    一.输入框激活问题 public void ActivateInputField(); //激活输入框 public void DeactivateInputField(bool clearSelec ...

  3. css中双冒号和单冒号区别

    :--是指的伪类 ::--是指的伪元素 1.字面意思: 伪类,1.css中有类选择器,某些元素并未定义类名,就可以通过伪类赋予样式,如:[:nth-child(n)]:2.伪类可以应用于元素执行某种状 ...

  4. nvm在windows下安装与使用

    1.卸载本地已经安装的所有node 2.nvm下载 下载地址https://github.com/coreybutler/nvm-windows ,选择nvm-noinstall.zip 放在本地盘, ...

  5. Long类型转换为IP String

    package com.barry.iputil.util; public class IPFormat { public static String toIPStr(Long LongIP) { i ...

  6. java中锁的应用(synchronized)

    在面试菜鸟的时候碰到的锁的编程问题,没答好,记录一下: package com.xielu.test; /** * Hello world! * */ public class App { priva ...

  7. 3、HTTP请求头与响应头

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  8. ajax的重新学习,以及axios

    首先在这次学习之前已经又过了简单的入门,并且在上学期vue的开发中对其中的ajax语法以及方法有所认识,但是还有很多别的框架不同种的写法,因此我需要掌握原生ajax的知识 一.对ajax的简单认识 a ...

  9. python.字典方法。第三天

    当需要为字典中的键设置默认值时,当该键没有任何值时使用它.代码如下 spam={'name':'Pooka','age':'5'} if 'color' not in sapm; spam['colo ...

  10. R grep

    SAIN<-FAIN[grepl("HE-H$",FAIN$rDD),,drop=TRUE]