#ATarc173d. [ARC173D] Bracket Walk

[ARC173D] Bracket Walk

题目描述

有一个包含 NN 个顶点和 MM 条边的有向图 GG。顶点编号为 11NN,每条边都被赋予了 () 的标签。第 ii 条边是从顶点 uiu_i 指向顶点 viv_i 的有向边,标签为 cic_i。该图中不存在重边和自环。

对于任意两个顶点 s,ts,t,都存在从 sstt 的路径。

请判断在图 GG 上是否存在满足以下所有条件的步行

  • 步行的起点和终点是同一个顶点。
  • 对于 i=1,2,,Mi=1,2,\dots,M,第 ii 条边在步行中至少被使用一次。
  • 按照步行中边的使用顺序,将边的标签依次排列得到的字符串是一个合法的括号序列。

步行的定义如下:在图 GG 上,步行是一个由 kk 个顶点和 k1k-1 条边交替组成的序列 (v1,e1,v2,,vk1,ek1,vk)(v_1,e_1,v_2,\dots,v_{k-1},e_{k-1},v_k),其中每条边 eie_i 是从 viv_i 指向 vi+1v_{i+1} 的有向边。v1v_1vkv_k 分别称为步行的起点和终点。

合法的括号序列定义如下:

  • 空字符串是合法的括号序列。
  • 如果 AA 是一个合法的括号序列,则 (AA) 按顺序连接得到的字符串也是合法的括号序列。
  • 如果 A,BA,B 是非空的合法括号序列,则 A,BA,B 按顺序连接得到的字符串也是合法的括号序列。

输入格式

输入通过标准输入给出,格式如下:

NN MM u1u_1 v1v_1 c1c_1 u2u_2 v2v_2 c2c_2 \vdots uMu_M vMv_M cMc_M

输出格式

如果存在满足条件的步行,输出 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

说明/提示

限制条件

  • 2N40002 \leq N \leq 4000
  • NM8000N \leq M \leq 8000
  • 1ui,viN1 \leq u_i, v_i \leq N
  • cic_i() 之一
  • uiviu_i \neq v_i
  • 如果 iji \neq j,则 (ui,vi)(uj,vj)(u_i, v_i) \neq (u_j, v_j)
  • 输入的所有数值均为整数
  • 输入给定的图中,对于任意两个顶点 s,ts,t,都存在从 sstt 的路径

样例解释 1

按顺序使用边 1,2,3,4,1,5,6,71,2,3,4,1,5,6,7 的步行,所有边都至少被用过一次,且按使用顺序排列的标签字符串 ()()()() 是一个合法的括号序列,因此满足条件。步行允许多次经过同一条边或同一顶点。

由 ChatGPT 4.1 翻译