题意
小 L 计划进行 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏。小 L 的赛车有三辆,分别用大写字母A、B、C表示。
地图一共有四种,分别用小写字母x、a、b、c表示。
其中,赛车A不适合在地图a上使用,赛车B不适合在地图b上使用,赛车C不适合在地图c上使用,而地图x则适合所有赛车参加。
适合所有赛车参加的地图并不多见,最多只会有 张。
场游戏的地图可以用一个小写字母组成的字符串描述。例如: 表示小L计划进行 场游戏,其中第 场和第 场的地图类型是x,适合所有赛车,第2场和第3场的地图是a,不适合赛车A,第4场和第7场的地图是b,不适合赛车B,第6场和第8场的地图是c,不适合赛车C。
小 L 对游戏有一些特殊的要求,这些要求可以用四元组 来描述,表示若在第 场使用型号为 的车子,则第 场游戏要使用型号为 的车子。
你能帮小 L 选择每场游戏使用的赛车吗?如果有多种方案,输出任意一种方案。
如果无解,输出 。
【样例解释】
小 L 计划进行 场游戏,其中第 场的地图类型是 ,适合所有赛车,第 场和第 场的地图是 ,不适合赛车 。
小 L 希望:若第 场游戏使用赛车 ,则第 场游戏使用赛车 。
那么为这 场游戏分别安排赛车 可以满足所有条件。
若依次为 场游戏安排赛车为 或 时,也可以满足所有条件,也被视为正确答案。
但依次安排赛车为 或 时,因为不能满足所有条件,所以不被视为正确答案。
【子任务】
测试点编号 |
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地图,而直接枚举每个选什么是的,再乘上m过不去。考虑利用2-sat图中每个地图可以有2个点,枚举x地图选A,B或B,C即可考虑到所有情况,效率。
下面讲一下对2-sat的理解,之前一直很蒙,主要是要利用它的反向对称性。
对于判断2-sat是否有解并输出任意方案的问题,首先可以暴力。枚举每个点选哪个,沿着连边往下看是否矛盾,这样每条边最多被访问n次效率。(如果有字典序的要求,也只能用这种方法了)
我们要做的是安排一个方案,使得一个点如果选,它连向的点都要选,并且每个地图都有且仅有一个点被选。考虑利用其反向对称性得到更高效的方法:对于有向图的强连通分量缩点,一个强连通分量的所有点必须全选或全不选,所以如果有一个地图的两个点在一个强连通分量内则无解。否则,注意到缩完点后的图仍然有反向对称性,即每个强连通分量都有对应的强连通分量,它们的点一一对应每个地图的两个点,并且这两个强连通分量在缩完点后的DAG中的连边也是反向对称的。这样,对这个DAG反向拓扑,每个强连通分量的所有点对应的地图还没染色的都染上这个点的颜色(相应的,它的反向对称点一定不染,由于图的对称性,它的拓扑序于它之前,所以并不矛盾),这样就保证一定有解,效率。
来源:CSDN
作者:sz_165394732
链接:https://blog.csdn.net/sz_165394732/article/details/104745345