luogu#P16390. [IATI 2024] Travel

[IATI 2024] Travel

题目描述

Yan 喜欢开着他的车在 Iatiland 旅行。

由于 Yan 旅行了很长时间,他已经想出了对整个国家地图的描述。Iatiland 的城市编号从 11NN,城市之间有双向的直接道路连接不同的城市。对于每个城市,他有一个从该城市通过一条直接道路可以到达的城市列表。数据保证,任意两个城市之间都存在唯一的路径。注意,该路径可能不是直接的,即可能会经过多条直接道路。注意到这意味着直接道路的总数为 N1N - 1 条。

Yan 喜欢系统地旅行,因此他想出了一个在周游全国时将遵循的算法。

他在第 11 天从城市 11 开始他的旅程,之后的每一天他都会从他当前所在的城市沿一条直接道路出发。他选择的道路总是当前城市列表中的第一条道路。然而,这个简单的过程对 Yan 来说显得相当无聊,所以在选好下一次将走的道路之后,他会将其从列表的开头移除,并将其追加到列表末尾。

Yan 旅行的主要目的是拜访他的朋友们并和他们闲聊。他有 MM 个想要拜访的朋友,编号从 11MM,每个朋友 ii 住在城市 PiP_i。只有当 Yan 当前正处于城市 PiP_i 时,他才能拜访朋友 ii。此外,Yan 想要按照给定的顺序拜访他的朋友们,即他不能在拜访朋友 ii 之前先拜访朋友 i+1i+1

请帮助 Yan 求出他按正确顺序拜访完所有朋友所需的最少天数。

输入格式

标准输入的第一行包含 22 个整数 —— NNMM

接下来是 NN 行,在第 ii 行中,首先给出 kik_i —— 从城市 ii 出发的直接道路条数,然后给出 kik_i 个整数 —— 与城市 ii 以直接道路相连的城市的初始列表。

接下来一行包含 MM 个整数 —— PiP_i,即 Yan 的朋友们居住的城市编号。

输出格式

在标准输出上的一行中输出所需的最少天数。

4 4
2 2 3
1 1
2 1 4
1 3
2 1 1 4
9

提示

样例解释

Yan 的旅程将花费 99 天,依次经过城市 $1,\textbf{2},\textbf{1},3,\textbf{1},2,1,3,\textbf{4}$。他将在第 22 天见到朋友 11,第 33 天见到朋友 22,第 55 天见到朋友 33,第 99 天见到朋友 44

数据范围

  • 1N5×1051 \leq N \leq 5\times 10^5
  • 1M5×1051 \leq M \leq 5\times 10^5
  • 1kiN11 \leq k_i \leq N - 1
  • 1PiN1 \leq P_i \leq N

子任务

子任务 分数 NN MM 附加约束
11 1010 50\leq 50
22 1000\leq 1000 1000\leq 1000
33 2020 105\leq 10^5
44 1010 1000\leq 1000 105\leq 10^5
55 1515 5×105\leq 5\times10^5 Pi=1P_i = 1
66 2020 105\leq 10^5
77 1515 5×105\leq 5\times10^5

只有在成功通过某个子任务中指定的所有测试数据时,该子任务的分数才会被给出。

翻译由 DeepSeek V4 Pro 完成