#qLTFLybttg030507. 1519:和平委员会

1519:和平委员会

1519:和平委员会

题目描述

原题来自:POI 2001

根据宪法,Byteland 民主共和国的公众和平委员会应该在国会中通过立法程序来创立。不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍。

此委员会必须满足下列条件:

  1. 每个党派都在委员会中恰有 11 个代表;
  2. 如果 22 个代表彼此厌恶,则他们不能都属于委员会。

每个党在议会中有 22 个代表。代表从 11 编号到 2n2n。编号为 2i12i-12i2i 的代表属于第 ii 个党派。

任务:写一程序读入党派的数量和关系不友好的代表对,计算决定建立和平委员会是否可能,若行,则列出委员会的成员表。

输入格式

第一行有两个非负整数 nnmm。他们各自表示:党派的数量 nn 和不友好的代表对 mm

接下来 mm 行,每行为一对整数 a,ba, b,表示代表 a,ba, b 互相厌恶。

输出格式

如果不能创立委员会,则输出一行 NIE。若能够成立,则输出包括 nn 个整数,按升序写出,每行一个,这些数字为委员会中代表的编号。

如果委员会能以多种方法形成,程序可以只输出它们的某一个。

样例

样例输入 #1

3 2
1 3
2 4

样例输出 #1

1
4
5

样例解释 #1

  • n=3n=3 个党派,代表编号为 1,21,2(党派1),3,43,4(党派2),5,65,6(党派3)。
  • 不友好的代表对有 m=2m=2
    1. 1133 互相厌恶
    2. 2244 互相厌恶
  • 需要从每个党派选一个代表,且互相厌恶的代表不能同时选。
  • 一种可行方案:选 11(党派1)、44(党派2)、55(党派3)。
    • 检查:1133 不都选(33 未选),2244 不都选(22 未选)。
  • 输出 114455(升序,每行一个)。

数据范围

  • 1n80001 \le n \le 8000
  • 0m200000 \le m \le 20000
  • 1a<b2n1 \le a < b \le 2n

时空限制

  • 时间限制:1000 ms
  • 内存限制:131072 KB

注意:本题是 2-SAT 问题。对于每个党派 ii,两个代表分别为 2i12i-12i2i,必须选其中一个。对于每一对互相厌恶的代表 aabb,表示不能同时选 aabb,即 ¬(ab)\lnot (a \land b),等价于 (¬a¬b)(\lnot a \lor \lnot b)。将其转化为蕴含式:a¬ba \to \lnot bb¬ab \to \lnot a。建图后求强连通分量,如果某个党派的两个代表在同一个强连通分量中,则无解(输出 NIE)。否则,按照拓扑逆序选择代表(选择强连通分量编号小的代表对应的变量取值)。输出所选的代表编号。