详细揭秘《颠倒歌》

颠倒歌

Statement

\(f(V,E)\) 为导出子图 \(G=(V,E\cap V^2)\) 中度数不超过 \(1\) 的点数。

\(T_1=(V,E_1),\,T_2=(V,E_2)\),记 \(T_1\preccurlyeq T_2\) 当且仅当 \(\forall S_2\subseteq V,\,\exists S_2\subseteq S_1\subseteq V,\,f(S_1,E_1)\leq f(S_2,E_2)\)

显然 \(\preccurlyeq\) 是一种偏序关系。

\(T_1\sim T_2\) 当且仅当 \(T_1\preccurlyeq T_2\)\(T_2\preccurlyeq T_1\)

显然 \(\sim\) 是一种等价关系。

给定 \(k\) 棵点集相同的树 \(T_1,T_2,\cdots,T_k\),求 \(\forall i\in[k],\,T\preccurlyeq T_i\)\(T\) 等价类数与 \(\forall i\in[k],\, T_i\preccurlyeq T\)\(T\) 个数。

保证每一问的答案均非 \(0\)

\(n\leq 5\times 10^3,\,k\leq 10^3\)

Solution

\(G_1\)\(G_2\) 的生成子图简记为 \(G_1\subseteq G_2\)

判定 \(\preccurlyeq\)

先考察如何缩小对 \(S_2\) 的选择,如若存在 \(S_2\subseteq S_2'\) 使得 \(f(S_2',E_2)\leq f(S_2,E_2)\),那么显然 \(S_2'\) 带来的判定更强,于是不难发现对于不连通的 \(S_2\),包含其的最小连通块 \(S_2'\) 肯定是更强的。

因此我们此后只需考虑连通块 \(S_2\),简单讨论下可以发现只需要作为包含若干个 \(T_2\) 上叶子的最小连通块 \(S_2\)。但事实上这条性质几乎是无用的,因为叶子是很难用的条件。

一些直觉让我们尝试去只考察 \(f(S_2,E_2)=2\)\(S_2\),即一条链。这个直觉的依据是应当考察些极小或极大的情况,\(=1\) 显然是孤点没有意义,而极大的话你甚至不保证 \(f(V,E_1)=f(V,E_2)\),因此极大是不统一的,因此只得考察 \(=2\) 的情况。那你发现若保证对所有 \(T_2\) 上的链 \(S_2\) 均满足其在 \(T_1\) 上包含它的最小连通块 \(S_1\) 是一条链,你就可以一点点归纳出每个 \(S_2\) 也都是合法的。

你还是可以把这个判定条件加强为只需要 \(S_2\) 是极长链,但是我们发现这个判定条件仍然没法做到 \(\mathcal{O}(n^{\mathcal{O}(1)})\),因此需要再寻觅些其他的判定,此时保留一个形式好看且判定的东西更多的条件也是重要的,因为更多的判定更容易带来更强的必要条件

\(T_2\) 上一条除端点外度数不超过 \(2\) 的链 \(S_2\),记 \(S_1\)\(T_1\) 上包含 \(S_2\) 的最小连通块,那首先应有 \(S_1\) 是一条链,其次 \(S_1\) 除去端点外也不能有度数超过 \(2\) 的点,否则你可以选上这个 \(T_1\) 上的分岔,使叶子数不小于 \(3\),而在 \(T_2\) 上不会增加叶子数(因为没有端点外度数超过 \(2\) 的点,不会分岔)。

于是记 \(G(T)=(V,\{(u,v)\;|\;\text{u,v 在 T 上的链上无 u,v 外度数超过 2 的点}\})\),我们可知 \(G(T_2)\subseteq G(T_1)\),也不难说明这是充要的。

那么 \(T_1\sim T_2\) 等价于 \(G(T_1)=G(T_2)\)

计算第一问: \(\forall i\in[k],\,T\preccurlyeq T_i\)\(T\) 等价类数

所求即为 \(\forall i\in[k],\, G(T_i)\subseteq G(T)\) 的不同 \(G(T)\) 个数。

首先先取出 \(G=\bigcup\limits_{i=1}^kG(T_i)\),但是这个形状似乎不是很好看。

考虑到对于任意一棵树 \(T\)\(G(T)\) 都一定满足任意一条边和一个简单环都恰属于一个团,也就是说进行点双缩点后每个点双都是一个团。

那么对于 \(G\subseteq G(T)\)\(G(T)\),一定有 \(G\) 上包含于某个环内的两个点一定在 \(G(T)\) 上被某一个团包含,因此取 \(G'\) 为把 \(G\) 上所有环补为团的无向图,\(G\subseteq G(T)\)\(G'\subseteq G(T)\) 是等价的。

那么求出 \(G'\) 的圆方树(其实就是 \(G\) 的圆方树),你所求的 \(G(T)\) 的圆方树(显然圆方树和 \(G(T)\) 也形成双射)一定是在 \(G'\) 圆方树上执行若干次对某个圆点 \(u\) 合并其两个邻方点 \(v_1,v_2\) 后使得:

  • 对于任意一个圆点 \(u\),其度数恰不为 \(2\)(否则应收入某个团内)。
  • 对于任意一个方点 \(u\),其相邻非圆方树叶子的圆点数(后即为度数)不大于 \(2\)(一条链至多两个界点,可以只有一个的原因是另一侧可能是原树叶子)。

不妨令根为方点,需进行细致的树形 dp,以下仅记录些重点:

转移到圆点 \(u\) 时:如果 \(u\) 的某个(经过 \(u\) 这层及以下的合并后)儿子方点不计 \(u\) 度数为 \(2\),其一定会把 \(u\) 的其他儿子方点以及 \(u\) 以上的所有方点合并起来才能使 \(u\) 为圆方树上叶子,不然度数就超过 \(2\) 了。那么接下来只考虑儿子方点只有不计 \(u\) 度数为 \(0,1\) 的即可,只需要背包转移出不计 \(u\) 度数为 \(1\) 的儿子个数,把其余 \(0\) 度的选进去,并乘上未被选入的 \(0\) 度点个数的贝尔数,还需减去使得 \(u\) 恰有一个儿子的情况,因为 \(u\) 一定有一个父亲。

时间复杂度 \(\mathcal{O}(n(n+k))\)

计算第二问:\(\forall i\in[k],\, T_i\preccurlyeq T\)\(T\) 个数

这次要先求 \(G=\bigcap\limits_{i=1}^k G(T_i)\)

我们可以证明 \(G\) 一定也满足缩点后每个点双恰为一个团(不妨记这种图为块树),因为你考虑随便取出 \(G\) 上的一个环的点集 \(S\),其在每个 \(G(T_i)\) 上一定构成团,因此得证。

求交

我们接下来将给出一种 \(\mathcal{O}(n)\) 对两个块树 \(G_1,G_2\) 求交 \(G_3\)(只存其圆方树)的算法:

\((u,v)\in G_3\) 等价于 \((u,v)\in G_1\)\((u,v)\in G_2\)

\(T_1\)\(G_1\) 圆方树而 \(T_2\)\(G_2\) 圆方树,那么 \(G_3\) 上每个点双团一定满足其中任意两点 \((u,v)\) 都有存在方点 \(w_1,w_2\) 使得 \(w_1\)\(u,v\)\(T_1\) 上相邻而 \(w_2\)\(u,v\)\(T_2\) 上相邻,反之若 \((u,v)\) 满足这样条件也一定会属于某个 \(G_3\) 点双团。

那么你只需要对每个圆点 \(u\),取出每个 \(T_1\) 上相邻点 \(w_1\)\(T_2\) 上相邻点 \(w_2\),在有序二元组 \((w_1,w_2)\) 的桶中加入 \(u\)。最后取出所有有不少于 \(2\) 个元素的桶,恰好与 \(G_3\) 上的点双团一一对应。

直接模拟这个过程是 \(\Omega(n^2)\) 的,但是事实上我们已知有不少于 \(2\) 个元素的桶数是 \(\mathcal{O}(n)\) 的,所以肯定有优化空间。考虑处理树上相邻点的常见套路是定根后对儿子还是父亲分讨。具体来说,我们对 \(T_1,T_2\) 分别随意定根,对每个圆点 \(u\) 先只计算其在两棵树上分别的父亲形成的二元组,那我们会漏掉的情况是 \(u,v\) 在某棵树上有祖先关系且深度差 \(2\),那这样的 \(u,v\) 只有 \(\mathcal{O}(n)\) 对,一一枚举即可。

综上,执行 \(k\) 次这个求交算法即可在 \(\mathcal{O}(nk)\) 的时间复杂度内求出 \(G\)

有解必要条件

为了接下来的计数方便,我们需要讨论些存在 \(G(T)\subseteq G\)\(T\)\(G\) 的必要条件。

不难发现至少应有 \(G\) 是连通的,那由此可得依次执行与 \(G(T_i)\) 一一取交的过程中,\(G\) 中每个结点在圆方树上(作为圆点)的度数是不降的,因为你取一次交在保证连通的情况下,只能把本来的一个点双团分裂成两个共一个点的点双团。

我们已经知道了对于任意一个 \(G(T)\),其圆方树上一定无二度圆点。

\(u\) 在每个 \(G(T_i)\) 上均非割点,即一定有它在每个 \(G(T_i)\) 属于且只属于一个团(也只有向这个团中其余点的连边),故在交后的 \(G\)\(N(u)\cap\{u\}\) 一定也构成一个团,因此 \(u\) 一定不是割点,也就一定不会是二度圆点。

故若 \(u\)\(G\) 的圆方树上为二度圆点,则 \(u\) 一定在至少一个 \(G(T_i)\) 的圆方树上不是一度圆点,即至少度数为 \(3\),就与度数不降矛盾,因此连通的 \(G\) 的圆方树上无二度圆点。又已知本题保证有解,故接下来只需考虑 \(G\) 的圆方树上无二度点的情况。

计数

我们声称,\(T\) 合法当且仅当其为 \(G\) 的生成树,又已知 \(G\) 是一个块树,只需对每个点双团用 Cayley 定理算出生成树个数,再用乘法原理乘起来即可。

首先我们知道一定有 \(T\subseteq G(T)\),因此合法的 \(T\) 确实是 \(G\) 的生成树。

接下来论证生成树 \(T\) 也一定合法,也就是不会产生不在同个团内的点对 \((u,v)\) 使得 \(u,v\) 树上开路径均为二度点,只需检查每个 \(G\) 的割点是否在 \(T\) 上度数不小于 \(3\) 即可,那我们已知其在 \(G\) 的圆方树上度数不小于 \(3\),因此若在 \(T\) 上度数小于 \(3\) 会使 \(T\) 不连通,故得证。

综上,时间复杂度 \(\mathcal{O}(nk)\)

posted @ 2026-01-20 17:37  山田リョウ  阅读(0)  评论(0)    收藏  举报