AT_joi2021_yo2_e スパイ 2 (Spy 2)

题目描述

JOI 国有 $N$ 名议员,编号从 $1$ 到 $N$。你作为 JOI 国的大臣,正在试图找出议员中的间谍。对于每位议员 $i$($1 \leq i \leq N$),你获得了如下信息: - 当 $T_i = 1$ 时,议员 $i$ 是间谍。 - 当 $T_i = 2$ 时,议员 $i$ 不是间谍。 - 当 $T_i = 3$ 时,无法确定议员 $i$ 是否为间谍。 此外,通过进一步的调查,你又获得了 $M$ 条新信息。第 $j$ 条调查信息($1 \leq j \leq M$)为:议员 $A_j$($1 \leq A_j \leq N$)声称“议员 $B_j$($1 \leq B_j \leq N$)是间谍,且议员 $C_j$($1 \leq C_j \leq N$)不是间谍”。 但是,如果议员 $A_j$ 是间谍,则第 $j$ 条调查中的证言与事实不符。也就是说,如果议员 $A_j$ 是间谍,则“议员 $B_j$ 是间谍”和“议员 $C_j$ 不是间谍”这两句话中,至少有一句与事实不符。另一方面,如果议员 $A_j$ 不是间谍,则第 $j$ 条调查中的证言可能为真,也可能为假。 请根据每位议员的信息和调查结果,判断这 $N + M$ 条信息是否存在矛盾。如果不存在矛盾,请编写程序,确定每位议员是否为间谍。如果有多个符合所有 $N + M$ 条信息的答案,输出其中任意一个即可。

输入格式

输入从标准输入读入,格式如下: > $N$ $M$ $T_1$ $T_2$ $\cdots$ $T_N$ $A_1$ $B_1$ $C_1$ $A_2$ $B_2$ $C_2$ $\vdots$ $A_M$ $B_M$ $C_M$

输出格式

请输出到标准输出。 如果存在矛盾的信息,请输出一行 `-1`。 否则,输出 $N$ 行,第 $i$ 行($1 \leq i \leq N$)输出 $1$ 表示议员 $i$ 是间谍,输出 $2$ 表示议员 $i$ 不是间谍。如果有多个符合所有 $N + M$ 条信息的答案,输出其中任意一个即可。

说明/提示

## 限制条件 - $1 \leq N \leq 300\,000$。 - $1 \leq M \leq 300\,000$。 - $1 \leq T_i \leq 3$($1 \leq i \leq N$)。 - $1 \leq A_j \leq N$($1 \leq j \leq M$)。 - $1 \leq B_j \leq N$($1 \leq j \leq M$)。 - $1 \leq C_j \leq N$($1 \leq j \leq M$)。 - $A_j \neq B_j$($1 \leq j \leq M$)。 - $A_j \neq C_j$($1 \leq j \leq M$)。 - $B_j \neq C_j$($1 \leq j \leq M$)。 ## 子任务 1.(7 分)$N \leq 16$,$M \leq 100$。 2.(38 分)$N \leq 3\,000$,$M \leq 3\,000$。 3.(55 分)无额外限制。 ## 样例说明 1 在输出样例 $1$ 中,议员 $1$ 是间谍,“议员 $2$ 是间谍且议员 $3$ 不是间谍”的证言由于议员 $2$ 不是间谍,因此证言与事实不符。因此,输出样例 $1$ 满足所有给定信息,是正确答案。此外,只有议员 $1$ 是间谍,其余议员不是间谍的答案也是正确的。 ## 样例说明 2 如果议员 $3$ 是间谍,则与第 $1$ 条调查信息不符。如果议员 $3$ 不是间谍,则与第 $2$ 条调查信息不符。由于信息存在矛盾,应输出 `-1`。 ## 样例说明 3 在输入样例 $3$ 中,所有议员是否为间谍的信息都已给出,并且这些信息与调查结果一致,因此输出样例 $3$ 是唯一的正确答案。注意,非间谍议员的证言可能为真,也可能为假。 由 ChatGPT 4.1 翻译