#ATarc173d. [ARC173D] Bracket Walk
[ARC173D] Bracket Walk
题目描述
有一个包含 个顶点和 条边的有向图 。顶点编号为 到 ,每条边都被赋予了 ( 或 ) 的标签。第 条边是从顶点 指向顶点 的有向边,标签为 。该图中不存在重边和自环。
对于任意两个顶点 ,都存在从 到 的路径。
请判断在图 上是否存在满足以下所有条件的步行:
- 步行的起点和终点是同一个顶点。
- 对于 ,第 条边在步行中至少被使用一次。
- 按照步行中边的使用顺序,将边的标签依次排列得到的字符串是一个合法的括号序列。
步行的定义如下:在图 上,步行是一个由 个顶点和 条边交替组成的序列 ,其中每条边 是从 指向 的有向边。 和 分别称为步行的起点和终点。
合法的括号序列定义如下:
- 空字符串是合法的括号序列。
- 如果 是一个合法的括号序列,则
(、、)按顺序连接得到的字符串也是合法的括号序列。 - 如果 是非空的合法括号序列,则 按顺序连接得到的字符串也是合法的括号序列。
输入格式
输入通过标准输入给出,格式如下:
输出格式
如果存在满足条件的步行,输出 Yes,否则输出 No。
样例 1
输入
5 7
1 2 (
2 3 )
3 4 (
4 1 )
2 4 )
4 5 (
5 1 )
输出
Yes
样例 2
输入
2 2
1 2 )
2 1 )
输出
No
样例 3
输入
10 20
4 5 (
5 6 (
6 7 )
2 5 )
5 8 (
6 3 )
8 5 )
1 2 (
9 10 (
4 7 (
3 4 )
8 9 (
2 1 )
1 4 )
2 3 )
3 2 (
7 8 (
7 4 )
10 9 )
9 8 )
输出
Yes
说明/提示
限制条件
- 是
(或)之一 - 如果 ,则
- 输入的所有数值均为整数
- 输入给定的图中,对于任意两个顶点 ,都存在从 到 的路径
样例解释 1
按顺序使用边 的步行,所有边都至少被用过一次,且按使用顺序排列的标签字符串 ()()()() 是一个合法的括号序列,因此满足条件。步行允许多次经过同一条边或同一顶点。
由 ChatGPT 4.1 翻译