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. linux相关命令-linux查看头两行、查看最后两行-查找一个文件里包含的error信息并且把它输出到另一个文件里-查看滚动日志-在一个目录下查找大于50M的文件-根据端口号去杀死某一个进程

    1.linux查看头两行.查看最后两行 使用head(查看前几行).tail(查看末尾几行).eg:查看/home/wenjian1的前10行内容,应该是:# head -n 10 /home/wen ...

  2. Redis Stream实现全部节点机器推送消息

    背景 有时候,在微服务时代,我们需要对全部的机器节点进行通知.在常规情况下,一个请求经过负载均衡只有一个机器可以收到.那么,如何能让全部的机器都收到同样的请求呢?需要借助消息队列的监听机制,让每个节点 ...

  3. OPENSSL 生成RSA公钥、私钥和证书

    在命令窗口执行下列操作. 1)生成RSA私钥: openssl genrsa -out rsa_private_key.pem 2048 生成内容: -----BEGIN RSA PRIVATE KE ...

  4. react-signature-canvas 签名功能

    基于移动端需要扫码签名的功能,这里记录一下. 1.使用 react-signature-canvas 插件,npm i react-signature-canvas --save 2.此功能签名后生成 ...

  5. 攻防(一)tomcat CVE-2020-1938 ftp 21端口

    TOMCAT kali自带POE msf6 > use auxiliary/admin/http/tomcat_ghostcat set RHOST 10.98.xx.xx msf6 auxil ...

  6. gimp脚本.scm一些心得记录

    gimp的脚本scm一些心得记录 GIMP 2.10 图像处理脚本推荐GIMP使用脚本使得图像处理的功能更加强大,对于一些常见操作可以通过脚本快速实现.GIMP也出来2.10版本了,比前面的2.8相比 ...

  7. react修改静态文件根目录

    .env(项目根目录环境变量文件) PUBLIC_URL:http://cdn.com/

  8. C# 连接EXCEL和ACCESS字符串2003及2007版字符串说明

    97-2003版本 EXCEL Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;ExtendedProperties=Excel 8.0;HDR=Y ...

  9. 匿名Lambda函数,C++

    1 // To Compile and Run: g++ -std=c++11 lambda.cc -Wall -O3 && ./a.out 2 3 4 #include <io ...

  10. linux中安装启动postgresql教程

    安装: 官网地址:https://www.postgresql.org 选择下载版本: https://www.postgresql.org/ftp/source 下载方式: wget https:/ ...