CF1354E Graph Coloring

题目描述

给定一个无自环、无重边的无向图,该图包含 $n$ 个顶点和 $m$ 条边。同时给定三个整数 $n_1$、$n_2$ 和 $n_3$。 你能否将每个顶点标记为数字 1、2 或 3,使得: 1. 每个顶点恰好被标记为 1、2 或 3 中的一个数字; 2. 标记为 1 的顶点总数恰好为 $n_1$; 3. 标记为 2 的顶点总数恰好为 $n_2$; 4. 标记为 3 的顶点总数恰好为 $n_3$; 5. 对于每条边 $(u, v)$,有 $|col_u - col_v| = 1$,其中 $col_x$ 表示顶点 $x$ 的标记。 如果存在多种合法的标记方案,输出任意一种即可。

输入格式

第一行包含两个整数 $n$ 和 $m$($1 \le n \le 5000$,$0 \le m \le 10^5$),表示图的顶点数和边数。 第二行包含三个整数 $n_1$、$n_2$ 和 $n_3$($0 \le n_1, n_2, n_3 \le n$),分别表示标记为 1、2、3 的顶点数量。保证 $n_1 + n_2 + n_3 = n$。 接下来的 $m$ 行,每行包含两个整数 $u_i$ 和 $v_i$($1 \le u_i, v_i \le n$,$u_i \neq v_i$),表示第 $i$ 条边连接的两个顶点。保证图中没有自环和重边。

输出格式

如果存在合法的标记方案,第一行输出 "YES"(不带引号)。第二行输出一个长度为 $n$ 的字符串,仅包含数字 1、2、3,第 $i$ 个字符表示第 $i$ 个顶点的标记。 如果不存在合法的标记方案,输出 "NO"(不带引号)。

说明/提示

由 ChatGPT 4.1 翻译