2020.08.05【省选B组】模拟 总结

今天比赛做得超级(不)爽。。。
估分:(10 + 0 + 30 + 0 = 40)
实际:(0 + 0 + 30 + 0 = 30)
我晕了,暴力也打错了。。。。。。

(T1)

隔了一天才回来打(T1)(2020.8.6)),发现自己已经习惯(爱上)了三进制转移。
我们对于一个格子有三个状态,黑色,白色,和任意色。转移的时候是一个个格子转移(轮廓线(DP))。
转移要保证该格子上面一个格子最后要是白色或任意色。
操作有三种:不操作,改变自己的颜色(黑白互换),改变周围的颜色(并且自己颜色变成任意色)。
然后有一点要注意的是:我们发现,改变周围颜色的时候下面的也会改变,但有一点可以解决:
我们发现之后上面的颜色是任意色的时候才会改变这个格子的颜色,所以转移时判断一下即可。

(T2)

这道题。。。竟然是网络流。。。
我们需要解决炮台相交的问题,可以发现相交实际上出现了一条路径。
规定炮台路径都是由纵向走向横向。对于每条边的边权即为该炮台打到的(max)减去当前格子的(val)
但注意到可以会出现有路径横纵变换多次的情况,于是将每个点拆成两个点,一个点走横向,一个点走纵向,然后将走纵向的点向横点连一条(inf)的边即可。
现在的问题转化成了一道最小割模型,跑最大流即可。

(T3)

改完(T4)(T3)。(* ̄︶ ̄)
这道题很明显可以看出是一道点分治,但我不会快速求经过当前重心的路径答案。
然而这个操作确实很麻烦。
我们假设当前节点(x)的父亲是(fa),然后我们可以发现:

[f[x]=f[fa]+size_-hb[c[x]] ]

其中(f[x])表示这一次的(x)的答案,size_表示根节点走这条路径这个儿子以前的子树大小,而(hb[c[x]])表示以前子树中包含(c[x])颜色的路径数。
这样我们正着来一遍,然后倒着来一遍,最后减去重复计算每个点到重心的答案即可。
表示打起来超级不方便。。。

(T4)

正解线性基。而且操作极骚,有点难想。
首先很容易将题目转化,成每次修改两个点的权值,求(n)个数的子集异或最大值。
(FK)大佬说:“如果是两个数可以用(trie)乱搞,而多个数则可以用线性基”
但是这个线性基是要支持修改的。而有个结论。
就是对于加入线性基的数,删除时间越晚的越优。
这样我们就可以对于每个线性基的数存一个删除时间点。
对于删除时间更晚的,我们可以将插入的值与线性基的值交换,然后继续做下去。
可以证明这样不会影响线性基的正确性。
删除我们如果找到删除时间相同的就将这位的值删去,否则不需要修改。
查询最大值直接贪心扫一遍即可。

总结

以后一定要把每一次比赛当做正式比赛来做,我做到后面竟然没有打暴力的心思了。。。危!危!危!
最好每道题都均衡分配时间,不要死在一道题上了
加油加油,中考成绩出了,再接再厉!

转载需注明出处。
原文地址:https://www.cnblogs.com/jz929/p/13439625.html