perspective的博客

博客

Tags
None

Southeastern Championship 夺冠指南

2022-02-07 23:58:26 By perspective

大家好,Southeastern Championship 就要开始了,有很多同学好奇,在这样一场高难度的比赛中,如何夺冠呢?

其实非常简单,你只需要和 HY 组队,然后等 HY 把所有题都秒了,自然就夺冠了。是不是很简单?

有任何问题的同学可以在下面留言哦。

题解

2021-12-08 13:47:43 By perspective

在解决问题之前首先要明确 length 如何计算,即对于给定的点集 S,经过 S 中所有点的最短路径长度应该怎么求。

性质 1 对于任意 𝑆𝐶𝑎,𝑏𝑆,存在一条从 𝑎 出发经过 𝑆 中所有点到达 𝑏 的路径。

证明𝑆=𝑣0,𝑣1,,𝑣|𝑆|1,其中 𝑣0=𝑎𝑣|𝑆|1=𝑏,构造路径 𝑃,先从 𝑣0𝑣1,从 𝑣1𝑣2,…,最后从 𝑣|𝑆|2𝑣|𝑆|1。因为 𝑖(1,|𝑆|]𝑣𝑖1𝑣𝑖 在树上连通,所以这样构造的路径 𝑃 一定是合法的。

𝑃 是经过 𝑆 中所有点的最短路径,将 𝑆 中的点按照第一次被 𝑃4𝑣_0, 𝑣_1, \cdots, 𝑣_{|𝑆|−1}$,那么有:

性质 2 𝑃𝑣0 为起点,𝑣|𝑆|1 为终点。

证明 假如 𝑃 不以 𝑣0 为起点,那么从 𝑃 的起点到 𝑣0 这一段路径没有经过 𝑆 中的点,去掉后 𝑃 更短,与 𝑃 是最短路径矛盾。类似地,如果 𝑃 不以 𝑣|𝑆|1 为终点,则 𝑣|𝑆|1 之后的路径可以去掉。

性质 3 𝑖[1,|𝑆|)𝑃 中第一次经过 𝑣𝑖1 之后必沿着 𝑣𝑖1𝑣𝑖 的简单路径到达 𝑣𝑖

证明 如果 𝑃 中从第一次经过 v𝑖1 到第一次经过 𝑣𝑖 这一段不是简单路径,那么改成简单路径后 𝑃 更短,与 𝑃 是最短路径矛盾。

性质 4𝑒𝑃 当且仅当删除 𝑒𝑆 中存在两点不连通(即 𝑢,𝑣𝑆𝑒𝑢𝑣 的简单路径上)。

证明 设删除 𝑒 后存在 𝑢,𝑣𝑆 不连通,那么删除 𝑒 后不可能有 𝑢,𝑣𝑃,因此要使 𝑢,𝑣𝑃 必有 𝑒𝑃。如果删除 𝑒 后任意 𝑢,𝑣𝑆 仍连通,说明 𝑢,𝑣𝑆𝑒 不在 𝑢𝑣 的唯一简单路径上,因此 𝑒𝑃

性质 5 任意边 𝑒𝑃 中经过最多 2 次。

证明 假设 𝑒=(𝑢,𝑣)𝑃 中出现了 3 次或以上,第 1 次为 𝑢𝑣,第 2 次为 𝑣𝑢,第 3 次为 𝑢𝑣,记 𝑃 为第 1 次经过 𝑒 后到第 2 次经过 𝑒 前这一段从 𝑣𝑣 的路径,那么可以把第 1 次经过 𝑒 前到第 2 次经过 𝑒 后的路径(𝑢𝑣𝑃𝑣𝑢)删掉,在第 3 次经过 𝑒 后加上 𝑃 这一段,这样 𝑃 经过的点集不变但长度减少了 2,与 𝑃 是最短路径矛盾。

性质 6𝑒𝑃 中经过恰 1 次当且仅当 𝑣0𝑣|𝑆|1 的简单路径包含 𝑒

证明𝑣0𝑣|𝑆|1 的简单路径包含 𝑒,那么删去 𝑒𝑣0𝑣|𝑆|1 不连通,故必有 𝑒𝑃。并且 𝑒 不会在 𝑃 中出现两次,否则若 𝑒=(𝑢,𝑣),第一次为 𝑢𝑣,第二次为 𝑣𝑢,因 之后不再经过 𝑒,故删掉 𝑒𝑣0𝑣|𝑆|1 均与 𝑢 在同一连通块,矛盾。反过来,若边 𝑒=(𝑢,𝑣)𝑃 中经过恰 1 次,那么删去 𝑒 后,𝑣0𝑢 在同一连通块,𝑣|𝑆|1𝑣 在同一连通块,而 𝑢,𝑣 不连通,从而 𝑒𝑣0𝑣|𝑆|1 的简单路径上。

根据以上性质,可以得到,对于点集 𝑆,若经过 𝑆 中所有点的最短路径 𝑃 起点为 𝑢,终点为 𝑣,那么:

length(𝑃)=2|𝐸𝑆path(𝑢,𝑣)|+|path(𝑢,𝑣)|=2|𝐸𝑆||path(𝑢,𝑣)|

其中,length(𝑃) 为路径 𝑃 的长度,𝐸𝑆 为删除后会导致 𝑆 中存在两点不连通的边集,即出现在某两点 𝑢,𝑣𝑆 之间的简单路径上的所有边的集合,path(𝑢,𝑣)𝑢,𝑣 之间的简单路径的边集,显然 path(𝑢,𝑣)𝐸𝑆

显然要使 length(𝑃) 最短,就要选择 𝑢,𝑣 使得 |path(𝑢,𝑣)| 最大,即 𝑢,𝑣𝑆 中的最远点对。设 𝑎,𝑏𝑆 中的最远点对,由性质 1,必定存在从 𝑎𝑏 的合法路径,也就存在从 𝑎𝑏 的最短路径,即满足 (???) 的路径。

从而,设 𝐷𝑆𝑆 中最远点对(所有 𝑢,𝑣𝑆 中,|path(𝑢,𝑣)| 的最大值)的距离,则 length=2|𝐸𝑆|𝐷𝑆 现在我们考虑如何求 (???) 的期望值,即 𝐸(length)。由期望值的性质不难得出

𝐸(length)=2𝐸(|𝐸𝑆|)𝐸(𝐷𝑆)

因此只需分开计算 |𝐸𝑆|𝐷𝑆 的期望值。

首先考虑如何计算 |𝐸𝑆|。用 𝐸 表示树的边集,显然 𝐸𝑆𝐸𝐸 的子集很多,不能枚举每个子集计算其概率。不过不难发现 𝐸(𝐸𝑆)=𝑒𝐸𝑃(𝑒𝐸𝑆),即 |𝐸𝑆| 的期望就是每条边出现在 𝐸𝑆 内的概率之和,可以从这个角度进行思考。

对于 𝑒𝐸𝑒𝐸𝑆 当且仅当删去 𝑒 之后,𝑆 中的点全在同一个连通块内。设 𝑒 删去后的两个连通块 𝐴,𝐵(这里的连通块指的是点集)内属于 𝐶 的点数分别为 𝑠|𝐶|𝑠,由于 𝐶 的大小为 𝐾 的子集 𝑆(|C|K) 个,满足 𝑆𝐴𝑆(sK) 个,满足 𝑆𝐵𝑆(|𝐶|𝑠𝐾) 个,且由于 |𝑆|=𝐾2>|𝐴𝐵|=0,所以 𝑆𝐴𝑆𝐵 互斥,故 𝑒𝐸𝑆 的概率 𝑃(𝑒𝐸𝑆)=(sK)(CK)+(|C|sK)(|C|K)

因此 𝑃(𝑒𝐸𝑆)=1(sK)(|C|K)(|C|sK)(|C|K)

这样,根据期望的性质就能得出 𝐸(|𝐸𝑆|)=𝑒𝐸𝑃(𝑒𝐸𝑆)=𝑒𝐸(1𝑓(𝑠𝑒,|𝐶|𝑠𝑒,𝐾)𝑓(|𝐶|𝑠𝑒,𝑠𝑒,𝐾))

其中 𝑠𝑒 为删去 𝑒 之后其中一个连通块中属于 𝐶 的点数。这可以使用树形动态规划来求解:将无根树转成有根树,然后记 𝑠(𝑣) 为以 𝑣 为根的子树中属于 𝐶 的节点个数,𝑐(𝑣)𝑣 的子节点集合。则可以计算所有的 𝑠(𝑣)𝑠(𝑣)=𝑣𝑐(𝑣)𝑠(𝑣)+[𝑣𝐶]

𝑒=(𝑢,𝑣),则 𝑢,𝑣 必有一个是另一个的父节点,不妨设 𝑢𝑣 的父节点,那么 𝑠𝑒=𝑠(𝑣)。这样就能在 𝑂(|𝑉|) 的时间内求出所有的 𝑠𝑒,进而在 𝑂(|𝐸|𝐾)=𝑂(|𝑉|𝐾) 的时间内求出 𝐸(|𝐸𝑆|),其中 𝑉 为树的点集,|𝑉|=|𝐸|+1。由于 |𝑉|50×50=2500𝐾300,这一步运行是比较快的。

接着再考虑如何计算 𝐸(𝐷𝑆)。因为 𝐶 中的点对只有 |C|23002 个,所以可以枚举点对 𝑢,𝑣𝐶,计算 𝑢,𝑣𝑆 的最远点对的概率。当然最远点对不唯一,为了使其唯一,我们重新定义一个点对 𝑢,𝑣 的距离 𝑑(𝑢, 𝑣) = |path(𝑢, 𝑣)| + 2^{−ℎ(𝑢)} + 2^{−ℎ(𝑣)} 这里 ℎ(𝑣) 是对每个点 𝑣 分配的编号,要求所有点的 ℎ(𝑣) 是两两不同的正整数,这样 𝑑(𝑢_1, 𝑣_1) = 𝑑(𝑢_2, 𝑣_2) 要求两者的小数部分相同,即 2^{−ℎ(𝑢_1)} + 2^{−ℎ(𝑣_1)} = 2^{−ℎ(𝑢_2)} + 2^{−ℎ(𝑣_2)},考虑两者的二进制表示可知仅当 \{𝑢_1, 𝑣_1\} = \{𝑢_2, 𝑣_2\} 时等式成立。于是不同的点对距离不同,最远点对就唯一了。

现在考虑计算 𝑎, 𝑏𝑆 的最远点对(所有 𝑎, 𝑏 ∈ 𝑆 中,𝑑(𝑎, 𝑏) 的最大值)的概率,那么需要满足的条件有

  1. ∀𝑣 ∈ 𝑆 − {𝑎, 𝑏}, max{𝑑(𝑣, 𝑎), 𝑑(𝑣, 𝑏)} < 𝑑(𝑎, 𝑏)
  2. ∀𝑢, 𝑣 ∈ 𝑆 − {𝑎, 𝑏}, 𝑑(𝑢, 𝑣) < 𝑑(𝑎, 𝑏)

事实上只要满足条件 \eqref{Cond1} 就够了。为什么呢?

假设现在条件 \eqref{Cond1} 已经满足了,那么对任意 𝑢, 𝑣 ∈ 𝑆 − \{𝑎, 𝑏\},设 𝐷𝑎𝑏间简单路径,𝑢′, 𝑣′𝐷 上的两点,满足 𝑢𝑢′ 的简单路径与 𝐷 不相交,𝑣𝑣′ 的简单路径与 𝐷 不相交(删除后每个连通块恰有一个点属于 𝐷,因为 𝐷 中的点数比 𝐷 中的边数多 1,且 𝐷 中的任意两点不可达),且 𝐷 上从 𝑎𝑏 先经过 𝑢′ 再经过 𝑣′,即 path(𝑎, 𝑢′) ∪ path(𝑢′, 𝑣′) ∪ path(𝑣′, 𝑏) = path(𝑎, 𝑏)

(否则交换 𝑢𝑣𝑢′𝑣′)根据 \eqref{Cond1},有 |path(𝑢, 𝑢′)|+|path(𝑢′, 𝑏)|+2^{−ℎ(𝑢)}+2^{−ℎ(𝑏)} < |path(𝑎, 𝑢′)| + |path(𝑢′, 𝑏)| + 2^{−ℎ(𝑎)} + 2^{−ℎ(𝑏)}|path(𝑢, 𝑢′)| + 2^{−ℎ(𝑢)} < |path(𝑎, 𝑢′)| + 2^{−ℎ(𝑎)} 同理 |path(𝑣, 𝑣′)| + 2^{−ℎ(𝑣)} < |path(𝑏, 𝑣′)| + 2^{−ℎ(𝑏)} 所以 𝑑(𝑢, 𝑣) = |path(𝑢, 𝑢′)| + |path(𝑢′, 𝑣′)| + |path(𝑣′, 𝑣)| + 2^{−ℎ(𝑢)} + 2^{−ℎ(𝑣)} < |path(𝑎, 𝑢′)| + |path(𝑢′, 𝑣′)| + |path(𝑏, 𝑣′)|+ 2^{−ℎ(𝑎)} + 2^{−ℎ(𝑏)} = 𝑑(𝑎, 𝑏)

因此我们证明了满足 \eqref{Cond1} 的同时必然满足 \eqref{Cond2}。这样问题就简单很多了:对于每对 𝑎, 𝑏 ∈ 𝐶,统计满足 \eqref{Cond1}𝑆 的个数。在此之前,我们先进行预处理:对每个 𝑣 ∈ 𝐶,从 𝑣 出发做一遍广度优先搜索,就能得到 𝑣 到每个点的距离。这样的预处理复杂度是 𝑂(|𝐶||𝑉 |) 的,没有时间上的问题。预处理之后就可以找出 𝐶 − \{𝑎, 𝑏\} 中所有满足条件的点的集合 𝐹,即 𝐹 = {𝑣 ∈ 𝐶 − \{𝑎, 𝑏\}| \max{𝑑(𝑣, 𝑎), 𝑑(𝑣, 𝑏)} < 𝑑(𝑎, 𝑏)}

现在考虑概率怎么算。首先 𝐶 一共有 \binom{|𝐶|}{𝐾} 个大小为 𝐾 的子集,满足 𝑎, 𝑏 ∈ 𝑆𝑆 − \{𝑎, 𝑏\} ⊆ 𝐹 的子集 𝑆\binom{|𝐹|}{𝐾−2} 个(这是由于去掉确定的 𝑎, 𝑏 以外,要从 𝐹 中取 𝐾 − 2 个点作为 𝑆 − \{𝑎, 𝑏\} ),因此 𝑆 满足 \eqref{Cond1} 的概率为 \frac{\binom{|F|}{K-2}}{\binom{|C|}{K}}

这样,枚举点对 𝑎, 𝑏 ∈ 𝐶,再通过枚举得到 |𝐹|,计算 \eqref{Value} 的值乘 𝑎, 𝑏 的距离,所有乘积的和就是 𝐸(𝐷_𝑆)。时间复杂度为 𝑂(|𝐶|^3),因为 |𝐶| ≤ 300,所以可以通过。

最后,把 𝐸(|𝐸_𝑆|)𝐸(𝐷_𝑆) 代入 \eqref{ExpectedValue} 就能求出 length 的期望值了。

共 2 篇博客