2-sat 速通

如题,这是一个只适合快速了解的文章,如果要学习 2-sat 那么请阅读其他文章。

求解的问题

给定一些要求,对于每一个要求必须满足其中一个,判断是否有解,如果有输出任意一组。

操作

定义 \(a'\)\(a\) 不满足,那么如果要求为 \(a,b\)\(a\to b+n\)\(b\to a+n\)

接下来跑 tarjan 缩点,如果 \(a,a+n\) 在同一个强连通分量中则无解,否则根据缩点后的编号决定选择。

如果 \(col_{a}\lt col_{a+n}\),那么选择 \(a\) 否则选择 \(b\),时间复杂度为 \(O(n+m)\)

posted @ 2024-12-26 21:45  未抑郁的刘大狗  阅读(3)  评论(0编辑  收藏  举报