P14334 [JOI2021 预选赛 R2] 间谍 2 / Spy 2
题目描述
JOI 国有 $ N $ 名议员,编号从 1 到 $ N $。作为 JOI 国的大臣,你试图找出议员中的间谍。你已获得关于每名议员 $ i $($ 1 \le i \le N $)的如下信息:
- 若 $ T_i = 1 $,则议员 $ i $ 是间谍。
- 若 $ T_i = 2 $,则议员 $ i $ 不是间谍。
- 若 $ T_i = 3 $,则议员 $ i $ 是否为间谍尚不明确。
此外,通过进一步调查,你获得了 $ M $ 条新信息。第 $ j $ 条调查信息($ 1 \le j \le M $)表示:议员 $ A_j $($ 1 \le A_j \le N $)声称“议员 $ B_j $($ 1 \le B_j \le N $)是间谍,且议员 $ C_j $($ 1 \le C_j \le N $)不是间谍”。
但需注意:若议员 $ A_j $ 是间谍,则第 $ j $ 条调查信息中的陈述与事实不符。换言之,若议员 $ A_j $ 是间谍,则“议员 $ B_j $ 是间谍”和“议员 $ C_j $ 不是间谍”这两项陈述中至少有一项为假。另一方面,若议员 $ A_j $ 不是间谍,则第 $ j $ 条调查信息中的陈述可能为真,也可能为假。
给定所有议员的初始信息以及调查结果,请编写程序判断这 $ 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 \le i \le N $)输出 1 表示议员 $ i $ 是间谍,输出 2 表示议员 $ i $ 不是间谍。若存在多个与 $ N + M $ 条信息均一致的答案,输出其中任意一个即可。
说明/提示
### 样例 1 解释
在输出样例 1 中,议员 1 是间谍,其陈述“议员 2 是间谍,且议员 3 不是间谍”因议员 2 并非间谍而与事实不符。因此,输出样例 1 与所给信息一致,为正确答案。
此外,“仅议员 1 是间谍,其余议员均不是间谍”这一答案也同样是正确的。
### 样例 2 解释
若假设议员 3 是间谍,则与第一条调查信息矛盾;若假设议员 3 不是间谍,则与第二条调查信息矛盾。由于信息存在矛盾,应输出 $ -1 $。
### 数据范围
- $ 1 \le N \le 300\,000 $。
- $ 1 \le M \le 300\,000 $。
- $ 1 \le T_i \le 3 $($ 1 \le i \le N $)。
- $ 1 \le A_j \le N $($ 1 \le j \le M $)。
- $ 1 \le B_j \le N $($ 1 \le j \le M $)。
- $ 1 \le C_j \le N $($ 1 \le j \le M $)。
- $ A_j \ne B_j $($ 1 \le j \le M $)。
- $ A_j \ne C_j $($ 1 \le j \le M $)。
- $ B_j \ne C_j $($ 1 \le j \le M $)。
### 子任务
1. (7 分)$ N \le 16 $,$ M \le 100 $。
2. (38 分)$ N \le 3\,000 $,$ M \le 3\,000 $。
3. (55 分)无额外约束。