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]\)表示这一次的\(x\)的答案,size_表示根节点走这条路径这个儿子以前的子树大小,而\(hb[c[x]]\)表示以前子树中包含\(c[x]\)颜色的路径数。
这样我们正着来一遍,然后倒着来一遍,最后减去重复计算每个点到重心的答案即可。
表示打起来超级不方便。。。
\(T4\)
正解线性基。而且操作极骚,有点难想。
首先很容易将题目转化,成每次修改两个点的权值,求\(n\)个数的子集异或最大值。
\(FK\)大佬说:“如果是两个数可以用\(trie\)乱搞,而多个数则可以用线性基”
但是这个线性基是要支持修改的。而有个结论。
就是对于加入线性基的数,删除时间越晚的越优。
这样我们就可以对于每个线性基的数存一个删除时间点。
对于删除时间更晚的,我们可以将插入的值与线性基的值交换,然后继续做下去。
可以证明这样不会影响线性基的正确性。
删除我们如果找到删除时间相同的就将这位的值删去,否则不需要修改。
查询最大值直接贪心扫一遍即可。
总结
以后一定要把每一次比赛当做正式比赛来做,我做到后面竟然没有打暴力的心思了。。。危!危!危!
最好每道题都均衡分配时间,不要死在一道题上了。
加油加油,中考成绩出了,再接再厉!

浙公网安备 33010602011771号