P11902 [NHSPC 2023] A. 演化树分析

题目描述

彼得是一位生物学家。有次他在两笔资料中分析同一群现存物种集合 $\Sigma = \{1, 2, \ldots, n\}$ 间的演化关系,却得到了不太一样的演化树,想知道这两棵树的相似程度。 一棵演化树 $T$ 是一棵无向无根树 (undirected, unrooted tree),其中叶节点为现存物种 $1, 2, \ldots, n$,其他节点则为已灭绝物种。设 $v \in V(T)$,我们用 $\deg(v)$ 来表示与节点 $v$ 相邻的节点个数。在一棵演化树中,每个代表已灭绝物种的节点 $v$ 均有 $\deg(v) \ge 3$。对于一个现存物种的子集合 $X \subseteq \Sigma$,我们用 $T\{X\}$ 来代表 $X$ 中的现存物种在 $T$ 上的演化关系所形成的「演化子树」,构建方式如下: 1. 对所有 $X$ 中的任两点,标记其在 $T$ 上的简单路径,并将所有不在 $X$ 且未被标记的点删除以得到 $T'$。 1. 从 $T'$ 中不断删除满足 $\deg(v) = 2$ 的非叶节点 $v$ 以得到 $T\{X\}$:将与 $v$ 连接的两条边合并成一条,并移除 $v$。 以下图的演化树 $T$ 为例。$T$ 里的现存物种集合为 $\Sigma = \{1, 2, 3, 4, 5\}$,若取 $X = \{3, 4, 5\}$,则经步骤 $1$ 后会得到 $T'$,再经过步骤 $2$ 后会得到 $T\{X\}$。注意当 $X = \emptyset$ 时,根据定义我们有 $T\{X\} = \emptyset$。 ![](https://cdn.luogu.com.cn/upload/image_hosting/c2xg13m0.png) 从一棵演化树 $T$ 中移除大小为 $k \ge 0$ 的任意边集合 $K$,可以得到 $k+1$ 棵子树 $T^{(1)}, T^{(2)}, \ldots, T^{(k+1)}$,其中每棵子树 $T^{(i)}$ 上的物种在 $T$ 中的演化关系都会构成一棵**演化子树**,我们称它们为从 $T$ 中移除 $K$ 所导出的**演化森林**。注意我们有 1. $T$ 自身为移除 $\emptyset$ 后导出的演化森林。 1. 若一棵子树 $T^{(i)}$ 上没有任何现存物种,对应的演化子树为空。 以上图中的 $T$ 为例,移除 $K = \{(1, 7), (7, 8), (2, 8), (5, 8)\}$ 四条边可以得到五棵子树 $T^{(1)}, T^{(2)}, \ldots, T^{(5)}$,接着导出演化森林: ![](https://cdn.luogu.com.cn/upload/image_hosting/10jt4cii.png) 比较两座现存物种相同的演化森林时,我们只关注现存物种间的联系,因此已灭绝物种(即非叶节点)的编号并不重要。设 $F_1$ 与 $F_2$ 为两座现存物种相同的演化森林,若移除它们的非叶节点编号后变得完全相同,我们就称 $F_1$ 与 $F_2$ 相似。更精确地说,我们称 $F_1$ 与 $F_2$ 相似,若且唯若存在某个一一映射 $\Phi: V(F_1) \to V(F_2)$,满足 1. 对任意 $u \in \Sigma = \{1, 2, \ldots, n\}$,我们有 $\Phi(u) = u$。 1. 对任意 $u, v \in V(F_1)$,我们有 $$(u, v) \in E(F_1) \iff (\Phi(u), \Phi(v)) \in E(F_2).$$ 以下图为例,如果将 $T_1, T_2, T_3$ 的非叶节点编号都移除,会发现 $T_1$ 与 $T_2$ 不相似,而 $T_2$ 与 $T_3$ 相似。 ![](https://cdn.luogu.com.cn/upload/image_hosting/8vu59rjm.png) 设 $T_1$ 与 $T_2$ 为现存物种相同的两棵演化树。若存在从 $T_1$ 与 $T_2$ 中各删除 $k$ 条边的方法,使得两者导出的演化森林相似,则称 $T_1$ 与 $T_2$ 的差异不大于 $k$,而满足此条件的最小整数 $k^*$ 称为 $T_1$ 与 $T_2$ 的**差异数**。如上图中 $T_2$ 与 $T_3$ 的差异数为 $0$,而 $T_1$ 与 $T_2$ 的差异数为 $1$。 ![](https://cdn.luogu.com.cn/upload/image_hosting/scjhebou.png) 从 $T_1$ 与 $T_2$ 各删除 $1$ 条边 | 导出了相似的演化森林 设从 $T_1$ 与 $T_2$ 中删除的边集合分别为 $K_1$ 与 $K_2$,两种删除方法被视作不同若且唯若 $K_1$ 不同或 $K_2$ 不同。现给定两棵物种集合均为 $\Sigma$ 的演化树 $T_1, T_2$ 以及一个整数上限 $k$,彼得想知道它们的差异数 $k^*$ 是否不大于 $k$;如果 $1 \le k^* \le k$,彼得也想知道有多少种从 $T_1$ 和 $T_2$ 中各删除 $k^*$ 条边的方法,可以使它们导出相似的演化森林。

输入格式

> $n$ $m_1$ $m_2$ $k$ > $u_1$ $v_1$ > $u_2$ $v_2$ > $\vdots$ > $u_{n+m_1-1}$ $v_{n+m_1-1}$ > $u_1'$ $v_1'$ > $u_2'$ $v_2'$ > $\vdots$ > $u_{n+m_2-1}'$ $v_{n+m_2-1}'$ * $n$ 代表现存物种集合 $\Sigma = \{1, 2, \ldots, n\}$ 的大小。 * $m_1$ 代表在 $T_1$ 中已灭绝物种(以 $n+1, n+2, \ldots, n+m_1$ 表示)的数量。 * $m_2$ 代表在 $T_2$ 中已灭绝物种(以 $n+1, n+2, \ldots, n+m_2$ 表示)的数量。 * $k$ 代表彼得设定的上限。 * $u_i, v_i$ 代表 $T_1$ 有一条边从 $u_i$ 连接到 $v_i$。 * $u_i', v_i'$ 代表 $T_2$ 有一条边从 $u_i'$ 连接到 $v_i'$。

输出格式

如果 $k^* = 0$,请输出 > $0$ 如果 $1 \le k^* \le k$,请输出 > $k^*$ > $S$ 其中 $S$ 为一整数,代表从 $T_1$ 与 $T_2$ 中各删除 $k^*$ 条边后导出的演化森林相似的删除方法数。如果 $k^* > k$,请输出 > $-1$

说明/提示

### 测试数据限制 * $n \ge 2$。 * $0 \le m_1 \le 300-n$。 * $0 \le m_2 \le 300-n$。 * $k \in \{0, 1, 2\}$。 * $1 \le u_i \le n+m_1$。 * $1 \le v_i \le n+m_1$。 * $1 \le u_i' \le n+m_2$。 * $1 \le v_i' \le n+m_2$。 * 给定的 $T_1$ 与 $T_2$ 保证连通,且 1. 若 $u \in \{1, 2, \ldots, n\}$,则在 $T_1$ 与 $T_2$ 中 $\deg(u) = 1$。 1. 若 $u \in \{n+1, n+2, \ldots, n+m_1\}$,则在 $T_1$ 中 $\deg(u) \ge 3$。 1. 若 $u \in \{n+1, n+2, \ldots, n+m_2\}$,则在 $T_2$ 中 $\deg(u) \ge 3$。 * 输入的数皆为整数。 ### 评分说明 本题共有四组子任务,条件限制如下所示。 每一组可有一或多个测试数据,该组所有测试数据皆需答对才会有该组分数。 | 子任务 | 分数 | 额外输入限制 | | :------: | :----: | ------------ | | 1 | $21$ | $k = 0$ | | 2 | $13$ | $k \in \{0, 1\}$ | | 3 | $23$ | $n+m_1 \le 30$ 且 $n+m_2 \le 30$ | | 4 | $43$ | 无额外限制 |