集训快完了才开坑是不是有点迟。。。
SDOI2017
R1真的多SB题……
R1D1
序列计数,容斥一下把总方案数减去没有质数的,可以直接DP,矩乘优化。
tag:DP,矩乘
树点涂色,可以写树剖但是会异常麻烦,也可以 LCT 做,修改操作一看就是 access 。
按 dfn 序扔到序列上,线段树维护一下到根的虚边条数,也就是答案。
注意 access 的过程中每次将虚边实边换的时候,Splay 中的右儿子并非真正的右儿子,需要访问一下右侧的 Splay 找深度最浅的一个点。
tag:LCT(?)
数字表格,简单莫反?
tag:数论
R1D2
新生舞会,二分答案,套路地将 \(b\) 减到 \(a\) 里,求二分图最大权匹配即可。
偷懒写了费用流没有写KM,GMOJ辣鸡机子跑不过。
tag:分数规划,二分图最大权匹配
硬币游戏,PGF 经典题(bushi
用 AC 自动机或者 hash 求出字符串之间的类似border的东西,根据 PGF 简单推导可以得到一个方程组,直接高斯消元。
tag:hash,PGF
相关分析,线段树维护区间和、区间平方和。
tag:数据结构
R2D1
龙与地下城,强烈鄙视为啥会有这种题,强行考数学,跳过了以后再看。
tag:期望,Simpson积分
苹果树(看了题解来胡一下明天写)(写完了这是真的难调)
先把取 \(i\) 则必须取 \(i\) 的父亲这一条件处理一下,
考虑拆点,将一个正常点拆成取一个和取大于一个,这样的树形结构还是不变的。
这一做法有什么好处?
方便考虑条件 \(t-h \le k\) ,也就是最长链是免费的。
这样做可以使最长链不需要额外枚举链上所用代价。
可以DP处理出 \(f_{i,j}\) ,\(i\) 点子树内用了 \(j\) 代价的最大答案,
先不考虑 DP 的维护,为了方便查询,我们想把要求的区间弄成前缀和的形式,
玩一下图会发现,如果记录出栈顺序,则一条路径左侧的节点都会早于该路径,
那么也可以反过来搞定右侧的。
在这种顺序下,其实子树内的数仍是在连续的区间内的,于是转移也变得非常简单,非常 simple 的单调队列优化一下?
注意不要开longlong!!!根本没必要,不要看错数据范围!!!
tag:DP(?)
切树游戏:
不太想写这种题。。。。
考虑如果没有修改,只有多次询问怎么做?
显然不能直接暴力,又由于 \(k\) 是每次询问给出,一个直接的想法就是 DP ,直接把 \(k\) 所有情况的答案一起算出来。
设 \(f_{i,j}\) 为 \(i\) 的子树内的异或和为 \(j\) 的方案数,树形 DP 可做,复杂度为 \(O(nk)\) 。
但这里带修。。。DDP?
直接用矩阵乘法并不现实, \(O(n k^3)\) 的复杂度就已经承受不起了,更何况带上线段树的 \(\log\) 。
转移的形式为是下标做 \(xor\) 运算的,可以想到 FWT ,相当于先将原本一个点能提供的只有两个项的多项式 FWT,转移时把众多儿子的DP数组直接点乘然后乘上自己的,最后求答案的时候再逆运算回来。
这样还是不能直接乘的,因为要联通(
琢磨一下,发现一个点处的 DP 数组只能由 儿子们合并来的\(xor\)自己 和 一个\(0\) 组成。这样写就是不需要矩乘的,每次乘了之后加上一个 \(0\) 的 FWT 数组,并不影响结合律。
树剖是 \(O(\log^2 n)\) 的搞不定,那就用 \(O(\log n)\) 的 LCT (忽略大常数)。
不写不写,这种题有什么好写的