题目描述
彼得是一位生物学家。有次他在两笔资料中分析同一群现存物种集合 Σ={1,2,…,n} 间的演化关系,却得到了不太一样的演化树,想知道这两棵树的相似程度。
一棵演化树 T 是一棵无向无根树 (undirected, unrooted tree),其中叶节点为现存物种 1,2,…,n,其他节点则为已灭绝物种。设 v∈V(T),我们用 deg(v) 来表示与节点 v 相邻的节点个数。在一棵演化树中,每个代表已灭绝物种的节点 v 均有 deg(v)≥3。对于一个现存物种的子集合 X⊆Σ,我们用 T{X} 来代表 X 中的现存物种在 T 上的演化关系所形成的「演化子树」,构建方式如下:
- 对所有 X 中的任两点,标记其在 T 上的简单路径,并将所有不在 X 且未被标记的点删除以得到 T′。
- 从 T′ 中不断删除满足 deg(v)=2 的非叶节点 v 以得到 T{X}:将与 v 连接的两条边合并成一条,并移除 v。
以下图的演化树 T 为例。T 里的现存物种集合为 Σ={1,2,3,4,5},若取 X={3,4,5},则经步骤 1 后会得到 T′,再经过步骤 2 后会得到 T{X}。注意当 X=∅ 时,根据定义我们有 T{X}=∅。

从一棵演化树 T 中移除大小为 k≥0 的任意边集合 K,可以得到 k+1 棵子树 T(1),T(2),…,T(k+1),其中每棵子树 T(i) 上的物种在 T 中的演化关系都会构成一棵演化子树,我们称它们为从 T 中移除 K 所导出的演化森林。注意我们有
- T 自身为移除 ∅ 后导出的演化森林。
- 若一棵子树 T(i) 上没有任何现存物种,对应的演化子树为空。
以上图中的 T 为例,移除 K={(1,7),(7,8),(2,8),(5,8)} 四条边可以得到五棵子树 T(1),T(2),…,T(5),接着导出演化森林:

比较两座现存物种相同的演化森林时,我们只关注现存物种间的联系,因此已灭绝物种(即非叶节点)的编号并不重要。设 F1 与 F2 为两座现存物种相同的演化森林,若移除它们的非叶节点编号后变得完全相同,我们就称 F1 与 F2 相似。更精确地说,我们称 F1 与 F2 相似,若且唯若存在某个一一映射 Φ:V(F1)→V(F2),满足
- 对任意 u∈Σ={1,2,…,n},我们有 Φ(u)=u。
- 对任意 u,v∈V(F1),我们有
$$(u, v) \in E(F_1) \iff (\Phi(u), \Phi(v)) \in E(F_2).
$$
以下图为例,如果将 T1,T2,T3 的非叶节点编号都移除,会发现 T1 与 T2 不相似,而 T2 与 T3 相似。

设 T1 与 T2 为现存物种相同的两棵演化树。若存在从 T1 与 T2 中各删除 k 条边的方法,使得两者导出的演化森林相似,则称 T1 与 T2 的差异不大于 k,而满足此条件的最小整数 k∗ 称为 T1 与 T2 的差异数。如上图中 T2 与 T3 的差异数为 0,而 T1 与 T2 的差异数为 1。

从 T1 与 T2 各删除 1 条边 | 导出了相似的演化森林
设从 T1 与 T2 中删除的边集合分别为 K1 与 K2,两种删除方法被视作不同若且唯若 K1 不同或 K2 不同。现给定两棵物种集合均为 Σ 的演化树 T1,T2 以及一个整数上限 k,彼得想知道它们的差异数 k∗ 是否不大于 k;如果 1≤k∗≤k,彼得也想知道有多少种从 T1 和 T2 中各删除 k∗ 条边的方法,可以使它们导出相似的演化森林。
输入格式
n m1 m2 k
u1 v1
u2 v2
⋮
un+m1−1 vn+m1−1
u1′ v1′
u2′ v2′
⋮
un+m2−1′ vn+m2−1′
- n 代表现存物种集合 Σ={1,2,…,n} 的大小。
- m1 代表在 T1 中已灭绝物种(以 n+1,n+2,…,n+m1 表示)的数量。
- m2 代表在 T2 中已灭绝物种(以 n+1,n+2,…,n+m2 表示)的数量。
- k 代表彼得设定的上限。
- ui,vi 代表 T1 有一条边从 ui 连接到 vi。
- ui′,vi′ 代表 T2 有一条边从 ui′ 连接到 vi′。
输出格式
如果 k∗=0,请输出
0
如果 1≤k∗≤k,请输出
k∗
S
其中 S 为一整数,代表从 T1 与 T2 中各删除 k∗ 条边后导出的演化森林相似的删除方法数。如果 k∗>k,请输出
−1
输入输出样例 #1
输入 #1
5 3 3 2
1 7
2 8
3 6
4 6
5 8
6 7
7 8
1 6
2 8
3 6
4 7
5 8
6 7
7 8
输出 #1
1
4
输入输出样例 #2
输入 #2
4 2 2 0
1 5
2 5
3 6
4 6
5 6
1 6
2 6
3 5
4 5
5 6
输出 #2
0
输入输出样例 #3
输入 #3
6 3 3 2
1 7
2 7
3 7
4 8
5 9
6 9
7 8
8 9
1 7
2 7
3 9
4 9
5 8
6 8
7 8
8 9
输出 #3
2
9
输入输出样例 #4
输入 #4
6 1 4 2
1 7
2 7
3 7
4 7
5 7
6 7
1 7
2 7
3 8
4 8
5 9
6 9
7 10
8 10
9 10
输出 #4
-1
说明/提示
测试数据限制
- n≥2。
- 0≤m1≤300−n。
- 0≤m2≤300−n。
- k∈{0,1,2}。
- 1≤ui≤n+m1。
- 1≤vi≤n+m1。
- 1≤ui′≤n+m2。
- 1≤vi′≤n+m2。
- 给定的 T1 与 T2 保证连通,且
- 若 u∈{1,2,…,n},则在 T1 与 T2 中 deg(u)=1。
- 若 u∈{n+1,n+2,…,n+m1},则在 T1 中 deg(u)≥3。
- 若 u∈{n+1,n+2,…,n+m2},则在 T2 中 deg(u)≥3。
- 输入的数皆为整数。
评分说明
本题共有四组子任务,条件限制如下所示。
每一组可有一或多个测试数据,该组所有测试数据皆需答对才会有该组分数。
子任务 |
分数 |
额外输入限制 |
1 |
21 |
k=0 |
2 |
13 |
k∈{0,1} |
3 |
23 |
n+m1≤30 且 n+m2≤30 |
4 |
43 |
无额外限制 |