AT_arc173_d [ARC173D] Bracket Walk
题目描述
有一个包含 $N$ 个顶点和 $M$ 条边的有向图 $G$。顶点编号为 $1$ 到 $N$,每条边都被赋予了 `(` 或 `)` 的标签。第 $i$ 条边是从顶点 $u_i$ 指向顶点 $v_i$ 的有向边,标签为 $c_i$。该图中不存在重边和自环。
对于任意两个顶点 $s,t$,都存在从 $s$ 到 $t$ 的路径。
请判断在图 $G$ 上是否存在满足以下所有条件的**步行**:
- 步行的起点和终点是同一个顶点。
- 对于 $i=1,2,\dots,M$,第 $i$ 条边在步行中至少被使用一次。
- 按照步行中边的使用顺序,将边的标签依次排列得到的字符串是一个合法的括号序列。
步行的定义如下:在图 $G$ 上,步行是一个由 $k$ 个顶点和 $k-1$ 条边交替组成的序列 $(v_1,e_1,v_2,\dots,v_{k-1},e_{k-1},v_k)$,其中每条边 $e_i$ 是从 $v_i$ 指向 $v_{i+1}$ 的有向边。$v_1$ 和 $v_k$ 分别称为步行的起点和终点。
合法的括号序列定义如下:
- 空字符串是合法的括号序列。
- 如果 $A$ 是一个合法的括号序列,则 `(`、$A$、`)` 按顺序连接得到的字符串也是合法的括号序列。
- 如果 $A,B$ 是非空的合法括号序列,则 $A,B$ 按顺序连接得到的字符串也是合法的括号序列。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $M$ $u_1$ $v_1$ $c_1$ $u_2$ $v_2$ $c_2$ $\vdots$ $u_M$ $v_M$ $c_M$
输出格式
如果存在满足条件的步行,输出 `Yes`,否则输出 `No`。
说明/提示
### 限制条件
- $2 \leq N \leq 4000$
- $N \leq M \leq 8000$
- $1 \leq u_i, v_i \leq N$
- $c_i$ 是 `(` 或 `)` 之一
- $u_i \neq v_i$
- 如果 $i \neq j$,则 $(u_i, v_i) \neq (u_j, v_j)$
- 输入的所有数值均为整数
- 输入给定的图中,对于任意两个顶点 $s,t$,都存在从 $s$ 到 $t$ 的路径
### 样例解释 1
按顺序使用边 $1,2,3,4,1,5,6,7$ 的步行,所有边都至少被用过一次,且按使用顺序排列的标签字符串 `()()()()` 是一个合法的括号序列,因此满足条件。步行允许多次经过同一条边或同一顶点。
由 ChatGPT 4.1 翻译