「题解」UOJ Round #6

A 破解密码

把相邻两项 \(h\) 抽出来列个方程,可以解得 \(a_{i-1}\)

注意特判 \((26^n-1) \bmod p=0\),即 \(26^n \bmod p=1\)

B 智商锁

我们可以在 \(O(n^3)\) 内求出一个图的生成树个数。

准备 \(1000\)\(10\times 10\) 的随机图,我们可以认为每张图的生成树个数在 \(1\sim 10^9\) 内均匀随机。

如果我们选出若干张图连成一棵树,生成树个数应该是每张图的个数积。

\(1000\) 张图里面,找到 \(4\) 张图积为给定的值,连成一棵树,是容易做的。

分析这样做的正确率,相当于 \(10^{12}\) 个值域为 \(10^9\) 的数随不到 \(x\) 的概率,根据生日悖论可知还是可以接受的。

C 懒癌

考虑完全图上的解法。

设有 \(k\) 只病狗。

  • \(k=1\),第一天会传来一声枪声。
  • \(k=2\),第二天,一只病狗的主人走出家门一看:“咦,我只看到了一只生病的狗?”然后他靠着他超高逼格的智商开始分析:如果我的狗没有生病,那么昨天这只病狗的狗主人应该没有看到任何一只生病的狗,那昨天就应该有枪声!好,一定是我的狗病了,“砰”。
  • 以此类推,若 \(k>2\),第 \(k\) 天,一只病狗的主人走出家门一看:“咦,我只看到了 \(k-1\) 只生病的狗?”然后他靠着他超高逼格的智商开始分析:如果我的狗没有生病,那么昨天这只病狗的狗主人应该看到 \(k-1\) 只生病的狗,那昨天就应该有枪声!好,一定是我的狗病了,“砰”。

故答案为 \(\sum_{i=1}^n i\dbinom{n}{i},\sum_{i=1}^n i\dbinom{n}{i}\)


现在来到任意图上。

DP,设 \(f_{S}\) 表示 \(S\) 集合内的狗病了,最早在第几天会听见枪声。

考虑 \(i\in S\),然后我们接着靠着狗主人超高逼格的智商分析:如果我的狗没病,那么什么时候应该听到枪声呢?枚举所有可能的生病情况 \(V\),那么如果我的狗没有生病,我最迟应该在 \(\max f_V\) 的时间听到枪声。所以我会在第 \(\max f_V+1\) 天开枪。\(f_{S}\) 就是所有 \(i\) 答案的 \(\min\)

对于 \(V\),有 \(i\notin V\)\(i\) 能看到的点和 \(S\) 中保持一致,剩下的任意。

注意到生病的狗越多,听见枪声的时间应该越

因此最优转移中,\(i\notin V\)\(i\) 能看到的点和 \(S\) 中保持一致,剩下一定 \(\in V\)

如果转移形成了环,环上的点一定不会开枪。


考虑建一个新图,和原图互补。

此时若 \(S\) 中存在一个点或一个点可以到达的点在新图中的强连通分量大小 \(>1\),转移就会出现环。

把这些连通块去掉,相连的边也删了,得到一个 DAG。

这样,一次转移相当于将 \(i\) 的权值设为 \(0\),将 \(i\) 指向的点权值设为 \(1\),直到所有的点权值为 \(0\),答案就是所有的操作的次数最小值。

这等价于权值曾为 \(1\) 的点的数量。

也就是 \(i\) 可以到达的所有点。

\(t_i\) 表示可以到达 \(i\) 的结点数,第一问的答案即为 \(\sum 2^{n-d_i}(2^{d_i}-1)\)

第一次开枪的人呢?

首先一定在 \(S\) 中。其次,对于一个点 \(i\),它是第一次开枪的,当且仅当选择它转移后的 \(f\) 值最小,这等价于 \(i\) 是叶子结点。于是答案即为 \(\sum 2^{n-d_i}\)

posted @ 2023-05-13 20:56  Network_Error  阅读(17)  评论(0)    收藏  举报