A16474 | Al Fine (Maximizing Version)
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
这是该问题的最大化版本。与其他版本的不同之处在于,在本版本中,你需要找到所有“公共树”中可能的最大深度。此外,本版本对于 $n$ 的限制更大。只有在你解决了所有版本的本题后,才能进行 hack。
在圣诞节,Tortinita 和 Arietta 各自都得到了一个圣诞树。巧合的是,她们的树拥有完全相同的性质:两棵树均有 $n+1$ 个结点,且都以结点 $0$ 作为根节点。在她们寄给你的圣诞贺卡中,会在祝福语后附上一个各自的树的 DFS 序列。回忆一下,DFS 序列是通过如下伪代码生成的。
```
dfs_order = []
def dfs(v):
dfs_order.append(v)
pick an arbitrary permutation s of children of v
for child in s:
dfs(child)
dfs(root)
```
设 Tortinita 的树的 DFS 序列为 $a_0, a_1, \ldots, a_n$,Arietta 的树的 DFS 序列为 $b_0, b_1, \ldots, b_n$。你注意到 $a_0=b_0=0$,而且因为她们是双胞胎姐妹,你想知道她们是否可能选到完全相同的树。你还觉得,姐妹们的圣诞树绝不会选平凡的结构。因此,你希望求出所有公共树中可能的最大深度 $^{\text{∗}}$。
$^{\text{∗}}$ 树的深度定义为任意节点到根节点的简单路径上的最大边数。
在圣诞节,Tortinita 和 Arietta 各自都得到了一个圣诞树。巧合的是,她们的树拥有完全相同的性质:两棵树均有 $n+1$ 个结点,且都以结点 $0$ 作为根节点。在她们寄给你的圣诞贺卡中,会在祝福语后附上一个各自的树的 DFS 序列。回忆一下,DFS 序列是通过如下伪代码生成的。
```
dfs_order = []
def dfs(v):
dfs_order.append(v)
pick an arbitrary permutation s of children of v
for child in s:
dfs(child)
dfs(root)
```
设 Tortinita 的树的 DFS 序列为 $a_0, a_1, \ldots, a_n$,Arietta 的树的 DFS 序列为 $b_0, b_1, \ldots, b_n$。你注意到 $a_0=b_0=0$,而且因为她们是双胞胎姐妹,你想知道她们是否可能选到完全相同的树。你还觉得,姐妹们的圣诞树绝不会选平凡的结构。因此,你希望求出所有公共树中可能的最大深度 $^{\text{∗}}$。
$^{\text{∗}}$ 树的深度定义为任意节点到根节点的简单路径上的最大边数。
输入格式
每组测试数据包含多组测试用例。第一行包含测试用例的数量 $t$($1\leq t \leq 10^4$)。接下来为每组测试用例的描述。
每组测试用例的第一行包含一个整数 $n$($2\leq n \leq 10^6$)。
第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$($1 \leq a_i \leq n$)。
第三行包含 $n$ 个整数 $b_1, b_2, \cdots, b_n$($1 \leq b_i \leq n$)。
保证序列 $a$ 和 $b$ 均无重复元素。
保证所有测试用例中 $n$ 的和不超过 $10^6$。
每组测试用例的第一行包含一个整数 $n$($2\leq n \leq 10^6$)。
第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$($1 \leq a_i \leq n$)。
第三行包含 $n$ 个整数 $b_1, b_2, \cdots, b_n$($1 \leq b_i \leq n$)。
保证序列 $a$ 和 $b$ 均无重复元素。
保证所有测试用例中 $n$ 的和不超过 $10^6$。
输出格式
对于每组测试用例,输出一个整数——所有公共树中可能的最大深度。
输入输出样例
输入 #1
4 2 1 2 1 2 2 1 2 2 1 5 3 1 5 2 4 4 3 2 1 5 5 2 3 4 1 5 3 2 1 4 5
输出 #1
2 1 3 1
在第一个测试用例中,$a$ 和 $b$ 相同。考虑一颗链式树,边为 $(0,1)$ 和 $(1,2)$,它能产生这两个 DFS 序列,其深度为 $2$。可以证明在所有公共树中最大深度为 $2$。
在第二个测试用例中,考虑一棵星形树,边为 $(0,1)$ 和 $(0,2)$,其深度为 $1$。可以证明最大深度为 $1$。
在第三个测试用例中,下图是深度最大的方案之一,深度为 $3$。

在第二个测试用例中,考虑一棵星形树,边为 $(0,1)$ 和 $(0,2)$,其深度为 $1$。可以证明最大深度为 $1$。
在第三个测试用例中,下图是深度最大的方案之一,深度为 $3$。

C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?