#abc299e. [abc299_e]Nearest Black Vertex

[abc299_e]Nearest Black Vertex

题目描述

给定一个简单的连通无向图,其中有 NN 个顶点和 MM 条边(简单图不包含自环和重边)。
对于 i=1,2,,Mi = 1, 2, \ldots, M,第 ii 条边双向连接顶点 uiu_iviv_i

判断是否存在一种方法来将每个顶点涂成黑色或白色,以满足以下两个条件,并在存在的情况下展示一种这样的方法:

  • 至少有一个顶点被涂成黑色。
  • 对于每个 i=1,2,,Ki = 1, 2, \ldots, K,满足以下条件:
    • 与顶点 pip_i 距离最短的一个已涂成黑色的顶点恰好距离为 did_i

这里,顶点 uu 和顶点 vv 之间的距离是连接 uuvv 的路径中边的最小数量。

约束条件

  • 1N20001 \leq N \leq 2000
  • N1Mmin{N(N1)/2,2000}N-1 \leq M \leq \min\lbrace N(N-1)/2, 2000 \rbrace
  • 1ui,viN1 \leq u_i, v_i \leq N
  • 0KN0 \leq K \leq N
  • 1p1<p2<<pKN1 \leq p_1 < p_2 < \cdots < p_K \leq N
  • 0diN0 \leq d_i \leq N
  • 给定的图是简单连通图。
  • 输入中的所有值均为整数。

输入

输入以以下格式从标准输入(Standard Input)给出:

NN MM u1u_1 v1v_1 u2u_2 v2v_2 \vdots uMu_M vMv_M KK p1p_1 d1d_1 p2p_2 d2d_2 \vdots pKp_K dKd_K

输出

如果没有办法将每个顶点涂成黑色或白色来满足条件,则输出 No
否则,在第一行输出 Yes,在第二行输出表示顶点着色的字符串 SS,如下所示。
其中,SS 是一个长度为 NN 的字符串,对于每个 i=1,2,,Ni = 1, 2, \ldots, NSS 的第 ii 个字符为 11 表示顶点 ii 被涂成黑色,为 00 表示白色。

Yes SS

如果存在多个解,则可以输出任意一个。


示例输入1

5 5
1 2
2 3
3 1
3 4
4 5
2
1 0
5 2

示例输出1

Yes
10100

满足条件的一种方法是将顶点 1133 涂成黑色,将顶点 2,4,52, 4, 5 涂成白色。
事实上,对于每个 i=1,2,3,4,5i = 1, 2, 3, 4, 5,设 AiA_i 表示顶点 ii 和一个已涂成黑色的顶点之间的最短距离,则 (A1,A2,A3,A4,A5)=(0,1,0,1,2)(A_1, A_2, A_3, A_4, A_5) = (0, 1, 0, 1, 2),其中 A1=0,A5=2A_1 = 0, A_5 = 2


示例输入2

5 5
1 2
2 3
3 1
3 4
4 5
5
1 1
2 1
3 1
4 1
5 1

示例输出2

No

无法通过将每个顶点涂成黑色或白色来满足条件,因此应输出 No


示例输入3

1 0
0

示例输出3

Yes
1