2-SAT

有若干人每个人有两个条件必须且只能满足其中之一,还有一些额外要求如A号人的1条件和B号人的2条件至少要满足一个,找一个方案。

使用2-SAT算法。

对于每个额外条件如A号人的1条件和B号人的2条件至少要满足一个,反面理解为若A号人的2条件不满足则B号人的2条件必须满足和若B号人的1条件不满足则A号人的1条件必须满足。以这些要求为边,每个人的两个条件为点建一个有向图。

跑个求强连通分量,如tarjan,若发现有一个人的1,2条件在一个强联通分量里则无解,否则选择每个人两种情况中逆拓扑序小的,这么说是因为tarjan求出的顺序就是拓扑序。

 

posted @ 2021-09-01 23:11  T_X蒻  阅读(36)  评论(0编辑  收藏  举报