题意
原题题目:如果每天晚上要靠数羊才能睡着,那我推荐你最好去练练养老太极拳来缓解压力
AKMer觉得,人生其实是一棵树,从根开始,没有回头路,由一道又一道选择题组成。有的人活得很长但是碌碌无为,那是因为他选择了长度较长但是权值很小的一条路。有的人燃烧青春成为别人眼中耀眼的光,那是因为选择了长度较短但是权值很大的一条路。
一条路的权值是这条路径上所有点的权值的异或和。为什么是异或和?因为阴阳均衡(0(阴)xor 1(阳)=1(真))才是至道,所以异或是最完美的运算。
AKMer在入坑OI之后发现原来自己做错选择题了,可惜这是树不是图,没有后悔路、返祖边。NOIP2018完挂的他觉得自己省选也没有什么希望,只有1e-2511154%的几率进队。所以他觉得人生很迷惘,很幻灭。感到迷惘的人往往连写出来的题面都显得很罗嗦。
如果有来生,AKMer想,我一定要做正确的选择。
由于AKMer对于省选已经不抱有任何希望了,所以他决定拿他仅有的1e-2511154%的进队几率与你交换Black Sheep Wall这句言灵,希望你告诉他来世应该怎么选择才能既活的长又能很舒服。
由于你是魔鬼,你能看见AKMer来世的人生树,点有点权,而且有的点是重要点,重要点代表的是人生中不发生个若干次都不敢说自己活过的事情,比如穿女装Cos服参加省选、将多校联测的题面当作是艺术品来书写然后遭人怒骂或者是用五个月时间增长自己的实力去挑战Wolfycz Alex Honnold。AKMer觉得人来这世界走一遭就是来体验的,至少要经历k次这样的事件人生才算圆满,所以他想问问你这棵树上经过至少k个重要点的路径的权值最大值是多少。
哦对了,AKMer想起来他似乎忘记告诉你一件很重要的事情了,那就是你找的这条路径还需要是“太极”路径。如果不是太极路径,那么下辈子也许他每天晚上都得靠数羊才能睡着了。
树上每条边是黑色或白色的。如果在某一条简单路径上存在一个点,这个点不是路径的端点,并且这个点到两个端点的两条子路径都满足路径上黑色和白色边数相等,那么这条路径就是太极路径。
比如1-2=3-4=5-6-7-8=9=10=11就是太极路径,因为5不是端点,5到1的路径有两条白色的边和两条黑色的边,5到11有三条白色的边和三条黑色的边。(-是白色的边,=是黑色的边)
因为他跟你交换的东西并不是 1 4 \frac{1}{4} 41 的生命而是1e-2511154%的进队几率这种廉价的东西,所以你只需要告诉他这个最大的权值即可。至于究竟该怎么走人生路,还是得要AKMer自己去探索。
数据点编号 | n = n= n= | k = k= k= | 特殊性质 |
---|---|---|---|
1 | 251 | 4 | 无 |
2 | 500 | 5 | 无 |
3 | 3141 | 11 | 无 |
4 | 4888 | 11 | 无 |
5 | 5000 | 11 | 无 |
6 | 100000 | 20 | 树是一条链 |
7 | 100000 | 20 | 树是一条链 |
8 | 100000 | 0 | 所有偶数点都与1相连,除1以外所有奇数点i与i-1相连 |
9 | 100000 | 0 | 所有偶数点都与1相连,除1以外所有奇数点i与i-1相连 |
10 | 100000 | 0 | 无 |
11 | 100000 | 0 | 无 |
12 | 100000 | 12 | 无 |
13 | 100000 | 20 | 无 |
14 | 100000 | 20 | 无 |
15 | 100000 | 20 | 无 |
16 | 100000 | 20 | 无 |
17 | 100000 | 17 | 无 |
18 | 100000 | 18 | 无 |
19 | 100000 | 18 | 无 |
20 | 100000 | 18 | 无 |
题解
对路径计算问题考虑点分治,显然有 O ( n k l o g 2 n ) O(nklog^{2}n) O(nklog2n)的做法:在一个点分中心里,对于每一条路径存存到它对应的trie树上,trie树记录两维代表[是否有阴阳边相等的后缀][有几个关键点],这样每次查找都要找第二维的某个后缀。
在此基础上不容易优化,考虑优化trie数的个数:发现原来的trie树上只记录了对应的数是否出现,而我们所需知道的是满足关键点个数不小于某个值的最大异或值,trie树上直接记录出现过的数的关键点数的最大值即可,效率 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)。