DTOJ 3858 [NOI2017] 游戏

题意

小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏。小 L 的赛车有三辆,分别用大写字母A、B、C表示。

地图一共有四种,分别用小写字母x、a、b、c表示。

其中,赛车A不适合在地图a上使用,赛车B不适合在地图b上使用,赛车C不适合在地图c上使用,而地图x则适合所有赛车参加。

适合所有赛车参加的地图并不多见,最多只会有 ddd 张。

nnn 场游戏的地图可以用一个小写字母组成的字符串描述。例如: S=xaabxcbcS=xaabxcbcS=xaabxcbc 表示小L计划进行 888 场游戏,其中第 111 场和第 555 场的地图类型是x,适合所有赛车,第2场和第3场的地图是a,不适合赛车A,第4场和第7场的地图是b,不适合赛车B,第6场和第8场的地图是c,不适合赛车C。

小 L 对游戏有一些特殊的要求,这些要求可以用四元组 (i,hi,j,hj)(i,h_i,j,h_j)(i,hi​,j,hj​) 来描述,表示若在第 iii 场使用型号为 hih_ihi​ 的车子,则第 jjj 场游戏要使用型号为 hjh_jhj​ 的车子。

你能帮小 L 选择每场游戏使用的赛车吗?如果有多种方案,输出任意一种方案。

如果无解,输出 1-1−1 。

【样例解释】

小 L 计划进行 333 场游戏,其中第 111 场的地图类型是 xxx ,适合所有赛车,第 222 场和第 333 场的地图是 ccc ,不适合赛车 CCC 。

小 L 希望:若第 111 场游戏使用赛车 AAA ,则第 222 场游戏使用赛车 BBB 。
那么为这 333 场游戏分别安排赛车 ABAA、B、AA、B、A 可以满足所有条件。
若依次为 333 场游戏安排赛车为 BBBBBBBBB 或 BAABAABAA 时,也可以满足所有条件,也被视为正确答案。
但依次安排赛车为 AABAABAAB 或 ABCABCABC 时,因为不能满足所有条件,所以不被视为正确答案。


【子任务】

测试点编号

n

d

m

其他性质

1

<=2

0

<=4

2

<=2

<=n

<=4

3

<=5

0

<=10

4

<=5

<=n

<=10

5

<=10

0

<=20

6

<=10

<=8

<=20

7

<=20

0

<=40

S中只包含c

8

<=20

0

<=40

9

<=20

<=8

<=40

S中只包含c或x

10

<=20

<=8

<=40

11

<=100

0

<=200

S中只包含c

12

<=100

0

<=200

13

<=100

<=8

<=200

S中只包含c或x

14

<=100

<=8

<=200

15

<=5000

0

<=10000

16

<=5000

<=8

<=10000

S中只包含c或x

17

<=5000

<=8

<=10000

18

<=50000

0

<=100000

19

<=50000

<=8

<=100000

S中只包含c或x

20

<=50000

<=8

<=100000


题解

如果没有x地图,显然是一个2-sat问题。注意到d很小,考虑枚举x地图,而直接枚举每个选什么是383^{8}38的,再乘上m过不去。考虑利用2-sat图中每个地图可以有2个点,枚举x地图选A,B或B,C即可考虑到所有情况,效率O(28m)O(2^8m)O(28m)。

下面讲一下对2-sat的理解,之前一直很蒙,主要是要利用它的反向对称性。

对于判断2-sat是否有解并输出任意方案的问题,首先可以暴力。枚举每个点选哪个,沿着连边往下看是否矛盾,这样每条边最多被访问n次效率O(nm)O(nm)O(nm)。(如果有字典序的要求,也只能用这种方法了)

我们要做的是安排一个方案,使得一个点如果选,它连向的点都要选,并且每个地图都有且仅有一个点被选。考虑利用其反向对称性得到更高效的方法:对于有向图的强连通分量缩点,一个强连通分量的所有点必须全选或全不选,所以如果有一个地图的两个点在一个强连通分量内则无解。否则,注意到缩完点后的图仍然有反向对称性,即每个强连通分量都有对应的强连通分量,它们的点一一对应每个地图的两个点,并且这两个强连通分量在缩完点后的DAG中的连边也是反向对称的。这样,对这个DAG反向拓扑,每个强连通分量的所有点对应的地图还没染色的都染上这个点的颜色(相应的,它的反向对称点一定不染,由于图的对称性,它的拓扑序于它之前,所以并不矛盾),这样就保证一定有解,效率O(m)O(m)O(m)。

上一篇:「NOI2017」泳池


下一篇:【noi2017】 整数 线段树or模拟