一些题(四)

[AGC029E] Wandering TKHS

考虑一个点 \(u\) 会对哪些点产生贡献,找到最浅的 \(u\) 的祖先 \(x\) 满足若能到 \(x\) 就一定能到 \(u\),那么 \(u\) 就只会贡献到 \(x\) 子树中的所有节点。而那个条件就相当于链 \([u,x)\) 的最大值小于链 \((x,1]\) 的最大值,于是求一下链 \([u,1]\) 的最大值和次大值讨论一下就能快速找到 \(x\) 了。

https://atcoder.jp/contests/agc029/submissions/27277050

[AGC005E] Sugigma: The Showdown

游戏能无限进行当且仅当存在一条红边满足他的两个端点在蓝树上的距离 \(>2\),并且 A 能安全走到其中一个端点。而当不考虑这种边时,B 的策略一定是沿着树上的最短路追,并且一定不会走回头路。那么可以从 A 的起点开始 bfs,判断一下走到它的时间是否小于它在蓝树上的深度即可。最后若不能无限进行,答案就为能走到的点中的最深深度。

https://atcoder.jp/contests/agc005/submissions/27459600

[AGC004E] Salvage Robots

首先转化为用出口去吃机器人,每往上走到新的一行最底下的一行的机器人就会消失,别的方向同理。于是一个时刻还活着的机器人就只和最远往四个方向分别走了几格有关,四维 dp 即可。

https://atcoder.jp/contests/agc004/submissions/27460378

[AGC002F] Leftmost Ball

直接记填了 \(i\) 种颜色多了 \(j\) 个白球,每次转移时要么加一个白球要么一次填完一种新颜色的剩下 \(k-1\) 个球(特判 \(k=1\))。

https://atcoder.jp/contests/agc002/submissions/27465461

[AGC005F] Many Easy Problems

考虑计算每个点不在哪些方案里,得到第 \(i\) 个答案为:

\[\sum_u\left({n\choose i}-\sum_{v\in son(u)}{size_v \choose i}\right) \]

然后考虑对所有大小相同的子树一起算贡献,能写成卷积的形式,卷一卷就好了。

[AGC016F] Games on DAG

考虑给每个点硬点一个 SG 值后怎么计算方案。那么对于那些 SG 为 \(0\) 的点,它们内部没有连边,其它点向它们之中至少连一条边。然后可以把这些点去掉,给剩下点的 SG 值 \(-1\) 递归考虑。

于是可以类似地设 dp 状态,记当前只剩 \(S\) 集合内的点时 \(1,2\) 号点 SG 值相同的方案。转移时枚举子集,再同时递归一些东西就能 \(O(3^n)\) 了。

https://atcoder.jp/contests/agc016/submissions/27509022

[AGC019F] Yes or No

首先策略肯定是哪个剩的多选哪个,一样多就随机选。那么稳定能选对 \(\max\{n,m\}\) 个,而每次出现一样多的情况就要猜一次,这样的总次数为 \(\sum_{i=1}^{\min\{n,m\}}{2i\choose i}{n-i+m-i\choose n-i}\)。那么就可以 \(O(n+m)\) 算了。

https://atcoder.jp/contests/agc019/submissions/27510786

[AGC025E] Walking on a Tree

将给定的路径当作无向边,如果能形成一个欧拉回路,那么从两个方向经过每条树边的路径数分别相同。如果不行,可以考虑将奇度点两两匹配连边使得新加的边的路径不交,这样对于每条树边,从它两边走过的路径数差的绝对值不会超过 \(1\),就能达到最优解。计算贡献时用树上差分即可。

[AGC012E] Camel and Oases

问题转化为把 \(n\) 个点分割成 \(\log V\) 个区间,第 \(i\) 个区间内部点的间距要求 \(\leq \lfloor V/2^{i-1}\rfloor\),问哪些点可能被划分到第 \(1\) 个区间里。那么可以状压求出能分割出 \(S\) 集合中的区间的最长前/后缀,求答案时枚举前缀和后缀一起拼出除 \(1\) 之外的所有区间的方案,再判断中间的能否作为第 \(1\) 个区间即可。

[AGC013E] Placing Squares

\(f_i\) 表示长为 \(i\) 的木板不考虑标记点的权值和,\(g_i\) 表示到第 \(i\) 个标记带容斥系数的权值和,那么有 \(g_0=1,g_i=-\sum_{j<i}f_{x_i-x_j}g_j\)(令 \(x_0=0,x_{m+1}=n\)),答案即为 \(-g_{m+1}\)。考虑如何计算 \(f_i\),有 \(f_{i}=\sum_{j=1}^{i}j^2f_{i-j}\),写成生成函数得 \(F={x(1+x)\over (1-x)^3}F+1\),于是 \(F={(1-x)^3\over 1-4x+2x^2-x^3}\)。可以列出递推式然后写成矩阵的形式,得出当 \(i>0\) 时,有:

\[f_i=\begin{pmatrix}1&0&0\end{pmatrix}\begin{pmatrix}4&-2&1\\1&0&0\\0&1&0\end{pmatrix}^i\begin{pmatrix}0\\1\\3\end{pmatrix} \]

那么 \(g\) 的递推就可以只考虑中间那个矩阵,就能用前缀和之类的优化,做到 \(O(m\log n)\) 了。好像有更 nb 的组合意义做法,哈哈,我是沙雕。

https://atcoder.jp/contests/agc013/submissions/27588855

[AGC018F] Two Trees

首先可以唯一确定每个点权值的奇偶性,如果有冲突就无解,否则可以直接构造。建一个新点连向两棵树的根,这样权值为奇数的点为所有奇度点,将两树对应标号的奇度点连边(称作新边),这样图中就存在一条欧拉回路。然后给权值为偶数的点标 \(0\),对于权值为奇数的点,如果它连出的新边在欧拉回路上是从 A 到 B 就标 \(1\),否则标 \(-1\),就合法了。证明可以考虑对某个节点的子树,它连到外部的边只有父亲边和内部的新边,考虑每次绕进绕出的边,新边会两两配对抵消然后剩下一条和父亲边配对,那么权值和的绝对值就为 \(1\)

https://atcoder.jp/contests/agc018/submissions/27600748

[AGC038F] Two Permutations

对于 \(P\) 的每一个环,它们要么一同取 \(i\),要么一同取 \(P_i\)\(Q\) 同理。于是可以考虑建最小割模型,令 \(p_i\) 为每一个 \(P\) 的环,\(q_i\) 为每一个 \(Q\) 的环。\(S\)\(p_i\) 连通、\(q_i\)\(T\) 连通代表取 \(i\),否则取 \(P_i\)\(Q_i\),那么可以依此分类讨论加边跑最大流。由于建出来的图是二分图,复杂度为 \(O(n\sqrt{n})\)

posted @ 2021-11-29 21:31  Y25t  阅读(57)  评论(0编辑  收藏  举报