【题解】UOJ Round #17
// created on 22.09.27
A. 滑稽树上滑稽果
我看错题了我 ..
注意到按位与不会变大,因此最终的答案一定是一条链。同样,答案会被分为 \(O(\log a)\) 段。为了方便先将所有值的共同位删去,这样最后的 and 值肯定会变成 \(0\) 。
如果每次挑最小的肯定有问题:我们考虑采取策略使得 and 值迅速变成 \(0\),而不是留一堆较小值不停地问。
如果当前 and 值是 \(a\),下一个 and 值是 \(b\),我们肯定希望 \(a\) 尽快变成 \(b\)!显而易见,如果我们能选 \(b\),就一定马上选 \(b\),否则我们到达不了 \(b\) 。而在这之前我们的决策肯定是完全包含 \(a\) 的,因此对 \(b\) 的决策不构成影响。
因此我们要支持的仅仅是:对于一个 \(a,b\),判断是否存在 \(a_i\) 和 \(a\) 的 and 为 \(b\) 。这个很容易预处理。反过来,如果我们看成将 \(\overline {b}:a\) "消灭" 也是可以的:这需要有一个数与之 and 为 \(0\) 。容易发现这样 and 后剩下的至少是 \(b\),而 \(b\) 的子集肯定不劣于 \(b\),所以没有问题。
B. 滑稽树下你和我
特殊性质,一定是固定某个点,移动另一个点,直到另一个点再次在节点上。我们可以令 \(f_{i,j}\) 表示点在 \(i,j\) 上,这个状态能否被到达。那么二分答案,处理出点对距离,就可以任意移动了。总复杂度 \(O(n(\sum \mathrm{deg})\log V)\) 。
一般情况有什么变化?我们需要考虑边的情况。不妨令 \(f_{i,j}\) 表示一个点在 \(i\) 上,另一个点在 \(j\) 这条边上,这个状态是否可达。这个状态划分是正确的,因为两点都在边的情况是必然能通过单调性划分到我们的状态中的。
转移的时候分类讨论一下即可,最开始将点到直线的距离(和能到达的范围处理好)即可。复杂度仍然是 \(O(n(\sum \mathrm{deg})\log V)\) 。
我还是不想写。
C. 滑稽树前做游戏
这类期望题做最基本的转化就是转为求 \(\int_{0}^{2}\mathrm{Pr}[t< \max(\max(x_i),\max(x_{a_i}+x_{b_i}))]\mathrm{dt}\) 。关于这一点和 【UR #20】金坷垃 很相似!
让 \(t\) 小于最大值,算起来比较奇怪,不妨计算 \(2-\int_{0}^{2}\mathrm{Pr}[t> \max(\max(x_i),\max(x_{a_i}+x_{b_i}))]\mathrm{dt}\) 。考虑到,如果将模型看成图,\((a_i,b_i)\) 对应边,那么答案是关于图 \(G\) 的函数。
考虑令 \(h(G,y,t)\) 表示图 \(G\) 上的 \(\mathrm{Pr}[t> \max(\max(x_i),\max(x_{a_i}+x_{b_i}))]\),且 \(\max x_i<y\) 。定义域是 \(\frac{t}{2}\leq y\leq \min (1,t)\)我们考虑转移:
意思就是,我们考虑,如果所有点权都不超过 \(\frac{t}{2}\),那么任意组合肯定合法。否则枚举点权最大的点,令其点权为 \(w\),与之相邻的点点权都不超过 \(t-w<\frac{t}{2}\) 。此时与之相邻的点不可能再影响答案(因为当前点点权最大),因此将当前点与相邻点全部删掉,处理子问题。
此时,\(h(G,y,t)\) 是关于 \(y,t\) 的二元多项式。直接维护二元多项式,状压解决 \(G\) 的话,复杂度难以接受。考虑归纳证明 \(y^it^j\) 系数非 \(0\) 当且仅当 \(i+j=|G|\):前半部分显然,后半部分,考虑 \(|G_i|+\mathrm{deg}_i=|G|-1\),再积分回来的话,次数仍然是 \(|G|\) 。
于是我们实际需要维护的只有 \(|G|\) 项。同样,在外层,我们不考虑状压处理,而是记忆化搜索。因为每个连通块独立,分成连通块搜索,jls 说状态很少那就是吧。