【NOI2017】游戏(搜索,2-sat)
题面
BZOJ的SPJ是假的
题解
如果没有\(x\)地图的影响
这就是一个裸的
\(2-sat\)问题
但是现在有不超过\(8\)个\(x\)地图的影响
我们不难想到枚举
\(x\)地图的状态再来
\(2-sat\)判断剩余是否可行。
这样的复杂度是
\(O(3^dn)\),稍微算一下发现这个复杂度有点假
考虑如何优化,我们枚举\(x\)地图不连什么
表面上看起来还是
\(O(3^dn)\) 但是,当他等价于
\(a,b\)两种地图时,
\(2^d\)种方案中一定会包含着最后的解,也就是说,
\(a,b\)两种地图替换
\(x\)的所有状态,等价于
\(a,b,c\)三种地图替换
\(x\) 这样的复杂度是
\(O(2^dn)\) 现在考虑\(2-sat\)如何连边
对于限制
\(i->j\) 显然直接连接
\(i->j\) 并且,如果
\(j'\)被选择,那么必须选择
\(i'\) 所以,同时连接
\(j'->i'\) 一些没有意义的连边可以直接省略。
至于输出方案,\(Tarjan\)求出来的强连通分量已经和拓扑序相关,因此没有必要重新建图拓扑排序
#include #include #include #include #include #include #include #include