周总结 round 2
P4183 [USACO18JAN]Cow at Large P
发现了一个性质:只要贝西不想被一个农夫追上,她就一定不会被一个农夫追上(尽管这样可能和其他农夫撞个满怀),因为二者速度相同。
于是我们确定了农夫的策略:到达一个点后把守住这个点及其子树,这样贝西就无法从这棵子树通过。不要想着全体主动出击,这和把守一个点效果相同,但无法有效统计答案。
设农夫初始点在 \(v\),贝西初始点在 \(u\),则农夫能阻止贝西通过一个点 \(x\) 当且仅当 \(dis(v,x)<=dis(u,x)\)。
同时为了保证最优,我们选取这些点中深度最浅的唯一一个节点放一个农夫。当一个点的父亲能被一个叶子管辖,我们自然无需统计这个点的答案。于是我们再次改变策略:设点 \(u\) 距离最近叶子节点的距离为 \(d_u\),我们放置一个农夫用于管辖点 \(v\),当且仅当 \(g_v<=dis(u,i)\) 且 \(g_{fa[v]} > dis(u,i)\)。
我们看一眼转换后的问题:,对于 \(i \in [1,n]\),求出有多少个节点 \(g_v<=dis(u,i)\) 且 \(g_{fa[v]} > dis(u,i)\)。
我们并不是很好一个点一个点的统计。于是我们想,如果满足条件,这个子树贡献为 \(1\),那是极好的。
换成数学语言就是:
其中 \(u\) 为农夫需要把守的点,我们想要 \(f(i)\) 的表达式。
发现这个子树的度数之和恰好是 \(2m-1\),于是 \(f(i)=2-deg(i)\)。于是最终的答案就是 \(\sum_{i \in [1,n]} (2-deg(i))[g_i <= dis(u,i)]\)。
这玩意可以点分治,于是完了。
P5327 [ZJOI2019]语言
ZJOI 签到题,恐怖如斯。
思考暴力。我们对每个点开棵线段树,然后对于每次普及树链剖分树套树加。统计有几个元素大于 \(0\)。
这过不了,因此我们考虑优化。
时间方面,好像并没有什么问题。
空间方面,每个点开棵线段树太大了,考虑线段树合并。但这样无法一个一个普及操作加过去,于是把普及操作拆成树上差分。于是做完了。
P1971 兔兔与蛋蛋
二分图博弈模板题,推荐阅读:
https://www.luogu.com.cn/blog/apple365/tu-tu-yu-dan-dan-ti-xie
FWT
FWT 模板题,推荐阅读:
https://www.cnblogs.com/closureshop/p/how-to-use-FWT.html
CF622C
考虑暴力。枚举每一行翻不翻转,剩下的列取 \(0\) 和 \(1\) 小的那一个(可以通过一次翻转得到)。
0/1 翻转常见操作就是转异或。对于列的初始状态 \(j\) 与终止状态 \(k\),他们与行的翻转状态 \(i\) 的关系是 \(j \oplus k= i\)。于是我们设 \(f_i\) 表示行翻转状态为 \(i\) 时的答案,\(a_i\) 为初始列中有多少为 \(i\) 的状态,\(b_i\) 为状态 \(i\) 的 \(0\) 与 \(1\) 个数的较小值,则:
这是异或卷积的形式,卷卷就好。
P3214 卡农
每一元素出现次数为偶数的限制很强,考虑如果最终集合为 \(i\) 个,我们已经得知前 \(i - 1\) 个集合,最后一个集合完全可以推出来。
于是设 \(dp_i\) 为使用 \(i\) 个集合的方案数。则貌似 \(dp_i=A_{2^n-1}^{i-1}\)。
发现了不合法的情况。第一种,需要的集合是空集。此时前 \(i-1\) 个构成合法方案,所以要减去 \(dp_{i-1}\)。
第二种,需要的集合出现过。此时把当前集合与重复的集合剔除,剩下 \(i-2\) 个构成合法方案。所以要减去 \((i-1)(2^n-i-1)f_{i-2}\)。其中 \(i-1\) 为集合位置,\(2^n-i-1\) 为集合元素。
减减就没了。
P6622 信号传递
我直接错误复杂度爆草,他要卡空间恶心我我干嘛惯着他。
P6623 树
trie 树是棵树,trie 树存储信息,trie 树的信息添加简单,trie 树可爱,所以 trie 树可以合并统计信息(方法类似于同样可爱的线段树)。
小学二年级时学过,trie 树 +1 就是交换左右儿子,于是这道题做完了。
P2020 兔农
留给各位听过杂题选讲的同学发挥🤭
还有些简单题,就不放上来了。