CF1228D Complete Tripartite

题目描述

给定一个包含 $n$ 个顶点和 $m$ 条边的简单无向图。该图不包含自环,任意一对顶点之间至多有一条边。该图可以是不连通的。 我们定义如下: 设 $v_1$ 和 $v_2$ 是两个不相交的非空顶点集合。若且仅若满足以下所有条件,称 $f(v_1, v_2)$ 成立: 1. 在顶点集合 $v_1$ 内没有两端都在 $v_1$ 的边。 2. 在顶点集合 $v_2$ 内没有两端都在 $v_2$ 的边。 3. 对于任意 $x \in v_1$ 和 $y \in v_2$,$x$ 和 $y$ 之间有一条边。 请将所有顶点划分为三个集合($v_1$,$v_2$,$v_3$),使得满足以下条件: 1. 每个集合都非空。 2. 每个顶点恰好属于一个集合。 3. $f(v_1, v_2)$、$f(v_2, v_3)$、$f(v_3, v_1)$ 都成立。 是否存在这样的划分?如果存在,请输出每个顶点所属的集合编号。

输入格式

第一行包含两个整数 $n$ 和 $m$($3 \le n \le 10^5$,$0 \le m \le \min(3 \cdot 10^5, \frac{n(n-1)}{2})$),表示图的顶点数和边数。 接下来的 $m$ 行,每行包含两个整数 $a_i$ 和 $b_i$($1 \le a_i < b_i \le n$),表示在 $a_i$ 和 $b_i$ 之间有一条边。图中不包含自环,任意一对顶点之间至多有一条边。该图可以是不连通的。

输出格式

如果存在满足条件的划分,输出 $n$ 个整数,第 $i$ 个整数表示第 $i$ 个顶点所属的集合编号($1$ 到 $3$ 之一)。如果不存在,输出 $-1$。 如果有多组答案,输出任意一组均可。

说明/提示

在第一个样例中,如果 $v_1 = \{1\}$,$v_2 = \{2, 3\}$,$v_3 = \{4, 5, 6\}$,则所有条件都满足。但你也可以用不同的方式划分顶点集合;例如 “2 3 3 1 1 1” 也是合法答案。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1228D/c2c365eaf8464b0509392f3446fceb5e5d58fe78.png) 在第二个样例中,不可能划分出满足条件的顶点集合。 由 ChatGPT 4.1 翻译