A93154.「NOI2022」挑战 NPC Ⅱ
省选/NOI-
通过率:0%
时间限制:2.00s
内存限制:1024MB
题目描述
诸由杨是一名咸鱼大学生,虽然他每天仍然幻想着在多项式时间内解决 NPC 问题。
诸由杨上课的时候了解到子图同构问题是一个 NPC 问题。他打算给出一个子图同构问题的多项式判定算法,间接地去证明 P = NP,这样他一定可以凭借这个伟大的工作荣获图灵奖!只可惜诸由杨才疏学浅,连子图同构问题属于 NPC 的证明都没有想出来。因而他退而求其次,准备判定一个更加简单的问题:
给定两棵有根树 G,H。设 ∣G∣ 代表树 G 中的节点个数,则这两棵树满足如下限制:1≤∣H∣≤∣G∣≤∣H∣+k。这里诸由杨保证 k 是一个小常数。
诸由杨可以删除 G 中的若干个节点,假定删除节点后后得到的子图为 G′。他想要知道是否存在一种删除节点的方式,使得删除后得到的子图 G′ 满足如下条件:
- G′ 连通。
- G′ 包含 G 中的根节点(也就是说 G 根节点在删除过程中没有被删除)。
- G′ 和 H 同构(也就是说存在一种让 G′ 中点重标号的方式,使得重标号得到的图和 H 完全相同,且 G 中的根节点经过重标号后恰好为 H 的根节点)。
输入格式
从文件 iso.in 中读入数据。
本题有多组测试数据。
输入的第一行依次包含两个正整数 C,T 和一个非负整数 k,三个数字分别表示当前测试点编号,测试数据组数和题目中给定的常数。如果当前测试数据为样例则 C=0。保证 T≤500、k≤5。
对于每一组测试数据:
输入的第一行包含一个正整数 n1,表示树 G 中的节点个数,保证 1≤n1≤105,且 ∑n1≤5×105。
输入的第二行包含 n1 个整数,描述了树 G 的结构。具体地,第 i(1≤i≤n1)个整数 ai 表示在树 G 中节点 i 的父节点,如果其为根节点则 ai=−1。保证按照上述规则得到的树为连通有根树。
输入的第三行包含一个正整数 n2,表示 H 中的节点个数,保证对于所有测试数据,满足 max(1,n1−k)≤n2≤n1。
输入的第四行包含 n2 个整数,描述了树 H 的结构。具体地,第 i(1≤i≤n2)个整数 bi 表示在树 H 中节点 i 的父节点,如果其为根节点则 bi=−1。保证按照上述规则得到的树为连通有根树。
输出格式
输出到文件 iso.out 中。
对于每一组测试数据:
输出一行一个字符串。如果存在删除 G 中节点的方式,使得其能够同时满足上述三个条件,则输出 Yes;否则输出 No。
输入输出样例
输入#1
0 3 1 3 2 -1 2 2 -1 1 4 3 3 -1 3 3 2 3 -1 5 -1 1 5 5 1 5 2 3 -1 3 2
输出#1
Yes No Yes
说明/提示
对于所有测试数据,满足 1≤T≤500,1≤n2≤n1≤105,∑n1≤5×105,0≤k≤5。
数据没有针对任何合理的哈希算法做任何针对性的构造,所以在合理范围内不需要过度担心因为哈希碰撞而产生的失分问题。
各测试点的附加限制如下表所示:
| n1,n2 | ∑n1 | 测试点 | k | 特殊性质 |
|---|---|---|---|---|
| ≤8 | ≤500 | 1∼3 | ≤0 | 无 |
| ≤8 | ≤500 | 4∼6 | ≤5 | 无 |
| ≤16 | ≤103 | 7∼8 | ≤0 | 无 |
| ≤16 | ≤103 | 9∼10 | ≤5 | 无 |
| ≤150 | ≤104 | 11 | ≤0 | 无 |
| ≤150 | ≤104 | 12 | ≤1 | 无 |
| ≤150 | ≤104 | 13 | ≤5 | 无 |
| ≤105 | ≤5×105 | 14∼16 | ≤0 | A |
| ≤105 | ≤5×105 | 17∼20 | ≤0 | B |
| ≤105 | ≤5×105 | 21 | ≤1 | 无 |
| ≤105 | ≤5×105 | 22∼23 | ≤3 | 无 |
| ≤105 | ≤5×105 | 24∼25 | ≤5 | 无 |
其中附加限制中的特殊性质如下所示:
- 特殊性质 A:保证有根树 G 每个节点要么是叶节点,要么有恰好 1 个儿子结点;另一种等价的表述是有根树 G 构成了一条链,且根节点为链的一个端点。
- 特殊性质 B:保证有根树 G 每个节点要么是叶节点,要么有恰好 2 个儿子结点,同时保证 G 的每一个叶节点深度均相同;另一种等价的表述是有根树 G 构成一棵完全二叉树,且根节点为完全二叉树的根节点。