DTOJ 3858 [NOI2017] 游戏

雨燕双飞 提交于 2020-03-09 11:11:10

题意

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

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

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

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

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

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

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

如果无解,输出 1-1

【样例解释】

小 L 计划进行 33 场游戏,其中第 11 场的地图类型是 xx ,适合所有赛车,第 22 场和第 33 场的地图是 cc ,不适合赛车 CC

小 L 希望:若第 11 场游戏使用赛车 AA ,则第 22 场游戏使用赛车 BB
那么为这 33 场游戏分别安排赛车 ABAA、B、A 可以满足所有条件。
若依次为 33 场游戏安排赛车为 BBBBBBBAABAA 时,也可以满足所有条件,也被视为正确答案。
但依次安排赛车为 AABAABABCABC 时,因为不能满足所有条件,所以不被视为正确答案。


【子任务】

测试点编号

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中只包含cx

10

<=20

<=8

<=40

11

<=100

0

<=200

S中只包含c

12

<=100

0

<=200

13

<=100

<=8

<=200

S中只包含cx

14

<=100

<=8

<=200

15

<=5000

0

<=10000

16

<=5000

<=8

<=10000

S中只包含cx

17

<=5000

<=8

<=10000

18

<=50000

0

<=100000

19

<=50000

<=8

<=100000

S中只包含cx

20

<=50000

<=8

<=100000


题解

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

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

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!