P17773 挑战 NPC IV
题目描述
在计算机科学中,**NP 完全(NP-Complete,简称 NPC)问题**是一类兼具理论深度与求解难度的经典问题——目前尚未找到它们的多项式时间算法,但一旦其中任何一个问题被攻克,所有的 NP 问题都将迎刃而解。
热衷于算法研究的小 W 一直梦想着挑战 NPC 问题。他了解到,图论中著名的“最大公共诱导子图问题”正是经典的 NPC 问题。面对一般图上难以逾越的复杂度鸿沟,小 W 决定退一步,先从结构更为优美的树入手,研究树上的同构连通子图问题。
具体而言,给定两棵均包含 $n$ 个节点的无根树 $T_1$ 和 $T_2$,两棵树的节点均分别编号为 $1 \sim n$。小 W 希望在 $T_1$ 中选出一个非空节点子集 $V_1$,并在 $T_2$ 中选出一个非空节点子集 $V_2$,同时保留各自集合内部节点在原树中的所有原有边,从而分别导出两个子图 $G_1$ 和 $G_2$。
小 W 要求导出的两个子图 $G_1, G_2$ 必须同时满足:
1. 连通性:$G_1$ 和 $G_2$ 均为连通图(特别地,仅包含 $1$ 个节点的图也视为连通)。
2. 同构性:$G_1$ 与 $G_2$ 同构。即存在一个从 $V_1$ 到 $V_2$ 的双射(一一对应关系)$f: V_1 \to V_2$,使得对于任意 $u, v \in V_1$,$u$ 与 $v$ 在 $G_1$ 中有边相连,当且仅当 $f(u)$ 与 $f(v)$ 在 $G_2$ 中有边相连。注意:**相互对应的节点 $u$ 和 $f(u)$ 不要求编号相同**。
现在,小 W 将这个简化后的问题交给了你:请计算满足上述要求的同构连通子图最多可以包含多少个节点(即求 $\vert V_1\vert$ 的最大值)?
输入格式
从标准输入读入数据。
第一行包含一个正整数 $n$,表示每棵树的节点数量。
接下来 $n - 1$ 行,每行包含两个正整数 $u, v$,表示树 $T_1$ 中的一条无向边 $(u, v)$。
接下来 $n - 1$ 行,每行包含两个正整数 $u, v$,表示树 $T_2$ 中的一条无向边 $(u, v)$。
输出格式
输出到标准输出。
输出一行一个正整数,表示选出的同构连通子图的最大节点数。
说明/提示
### 样例 1 解释
在 $T_1$ 中选择节点集合 $V_1 = \{1, 2, 3\}$,在 $T_2$ 中选择节点集合 $V_2 = \{1, 2, 3\}$。将 $V_1$ 中的节点 $1, 2, 3$ 依次对应到 $V_2$ 中的节点 $2, 1, 3$,导出的两个子图均为包含 $3$ 个节点的链,满足连通且同构。
由于 $T_1$ 本身是一条链,其任意连通子图也必然是一条链;而菊花图 $T_2$ 中最长的链仅包含 $3$ 个节点,因此无法选出节点数超过 $3$ 的同构连通子图。
### 样例 2
见题目附件中的 `npc/npc2.in` 与 `npc/npc2.ans`。
该样例满足子任务 $1$ 的约束条件。
### 样例 3
见题目附件中的 `npc/npc3.in` 与 `npc/npc3.ans`。
该样例满足子任务 $4$ 的约束条件。
### 样例 4
见题目附件中的 `npc/npc4.in` 与 `npc/npc4.ans`。
该样例满足子任务 $7$ 的约束条件。
### 子任务
对于全部数据,保证 $1 \le n \le 500$,每条边的两端点编号均在 $1 \sim n$ 之间,且给出的两张图均为合法的树。
本题满分为 $150$ 分,采用子任务捆绑测试。只有通过一个子任务中的全部测试点,才能获得该子任务的分数。各子任务的详细数据范围见下表。
| 子任务编号 | $n$ | 特殊性质 | 分值 |
| :---: | :---: | :---: | :---: |
| $1$ | $\le 10$ | 无 | $20$ |
| $2$ | $\le 60$ | 无 | $25$ |
| $3$ | $\le 100$ | 无 | $30$ |
| $4$ | $\le 500$ | A | $20$ |
| $5$ | $\le 500$ | B | $15$ |
| $6$ | $\le 500$ | C | $10$ |
| $7$ | $\le 500$ | 无 | $30$ |
特殊性质 A:两棵树中所有节点的度数均不超过 $3$。
特殊性质 B:存在一种最优方案,其同构映射将 $T_1$ 的节点 $1$ 对应到 $T_2$ 的节点 $1$。
特殊性质 C:保证最终答案不小于 $n - 1$。
注:树中一个节点的度数是指与该节点直接相连的边的数量。