#4720. Nearest Black Vertex

0

Nearest Black Vertex

Nearest Black Vertex

题目描述

你被给定了一个具有 NN 个顶点和 MM 条边的简单连通无向图(简单图不包含自环也不包含重边)。
对于 i=1,2,…,Mi = 1, 2, \ldots, M,第 ii 条边双向连接顶点 uiu_i 和顶点 viv_i。 判断是否存在一种将每个顶点涂成黑色或白色的方法,使下列两个条件都成立,并在存在时给出一种这样的涂色方法。

至少有一个顶点被涂成黑色。 对于每个 i=1,2,…,Ki = 1, 2, \ldots, K,下列条件成立: 顶点 pip_i 与任一被涂成黑色的顶点之间的最小距离恰好为 did_i。

这里,顶点 uu 与顶点 vv 之间的距离是连接 uu 和 vv 的路径所包含的边数的最小值。

输入格式

输入从标准输入给出,格式如下: 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

输出格式

如果不存在将每个顶点涂成黑色或白色以满足条件的方法,输出 NoNo。
否则,在第一行输出 YesYes,第二行输出表示顶点涂色的字符串 SS,格式如下:
这里,SS 是一个长度为 NN 的字符串,对于每个 i=1,2,…,Ni = 1, 2, \ldots, N,当顶点 ii 被涂成黑色时,SS 的第 ii 个字符为 11,被涂成白色时为 00。 Yes SS

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

5 5
1 2
2 3
3 1
3 4
4 5
2
1 0
5 2
Yes
10100
5 5
1 2
2 3
3 1
3 4
4 5
5
1 1
2 1
3 1
4 1
5 1
No
1 0
0
Yes
1

提示

1≤N≤20001 \leq N \leq 2000 N−1≤M≤min⁡{N(N−1)/2,2000}N-1 \leq M \leq \min\lbrace N(N-1)/2, 2000 \rbrace 1≤ui,vi≤N1 \leq u_i, v_i \leq N 0≤K≤N0 \leq K \leq N 1≤p1<p2<⋯<pK≤N1 \leq p_1 \lt p_2 \lt \cdots \lt p_K \leq N 0≤di≤N0 \leq d_i \leq N 给定的图是简单且连通的。 输入中的所有数值均为整数。一种满足条件的方法是将顶点 1,31, 3 涂成黑色,将顶点 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.
不存在通过涂色满足条件的办法,所以你应该输出 NoNo.

标签: AtCoder|abc299E

来源

AtCoder|abc299E