AT_tkppc2016_g 貢物(Tribute)

题目描述

joisino 姐姐的新工作是测试一款游戏。 在游戏中,主人公需要拜访不同的村庄以获取信息。 获取信息的方式是选择一些特定的贡品献给村庄(可以选择不献)。 有 $N$ 种贡品,编号从 $1$ 到 $N$。 同时,有 $M$ 个村庄,编号从 $1$ 到 $M$。 每个村庄都有自己的规定。 不同村庄的规定不会相同。 规定要求不能同时满足两个“条件”。每个“条件”可以是“献上某个贡品 $X$”或“不献上某个贡品 $X$”。 随着游戏的发展,村庄会进行合并。 在第 $i$ 次合并中,村庄 $P_i$ 和村庄 $Q_i$ 被合并为新的村庄 $M+i$。 合并时,确保村庄 $P_i$ 和村庄 $Q_i$ 存在,合并后,村庄 $P_i$ 和 $Q_i$ 消失。 新村庄会继承合并前村庄的所有规定。 合并过程一直进行,直到只剩下村庄 $2M-1$。 村庄 $1$ 到村庄 $M$ 都有遵守所有规定的贡品组合,但村庄 $M+1$ 到 $2M-1$ 可能会有相互矛盾的规定,导致无法同时满足所有规定。 joisino 姐姐的任务是编写一个程序,判断村庄 $M+1$ 到 $2M-1$ 是否有满足所有规定的贡品组合。

输入格式

输入以以下格式给出: > $N$ $M$ $A_1$ $B_1$ $A_2$ $B_2$ : $A_M$ $B_M$ $P_1$ $Q_1$ $P_2$ $Q_2$ : $P_{M-1}$ $Q_{M-1}$ - 第 $1$ 行包含两个整数 $N(1 \le N \le 10^5)$ 和 $M(2 \le M \le 10^5)$,分别表示贡品种类数量和村庄数量。 - 接下来的 $M$ 行中,第 $i$ 行包含两个整数 $A_i(1 \le |A_i| \le N), B_i(1 \le |B_i| \le N)$,表示第 $i$ 个村庄的规定。 - $A_i$ 和 $B_i$ 描述了两个“条件”:如果 $A_i$ 为正,则表示“献上贡品 $|A_i|$”;如果 $A_i$ 为负,则表示“不献上贡品 $|A_i|$”。$B_i$ 同理。 - 接下来的 $M-1$ 行中,第 $i$ 行包含两个整数 $P_i(1 \le P_i < M+i), Q_i(1 \le Q_i < M+i)$,表示合并的两个村庄。

输出格式

输出应包括 $M-1$ 行。 对于第 $i$ 行,如果村庄 $M+i$ 存在符合所有规定的贡品组合,输出 `"Possible"`;否则输出 `"Impossible"`。

说明/提示

### 配点 这道题目设有部分分数。 3. 数据集 $1$ 满足 $M(1 \le M \le 10^3)$,正确解答可以得到 $15$ 分。 4. 数据集 $2$ 没有其他限制,正确解答可以得到 $125$ 分。 ### 样例解释 1 例如,村庄 $5$ 可以选择什么都不献;村庄 $6$ 可以献上贡品 $1$ 和 $3$;村庄 $7$ 可以献上贡品 $2$。 **本翻译由 AI 自动生成**