2-SAT
有若干人每个人有两个条件必须且只能满足其中之一,还有一些额外要求如A号人的1条件和B号人的2条件至少要满足一个,找一个方案。
使用2-SAT算法。
对于每个额外条件如A号人的1条件和B号人的2条件至少要满足一个,反面理解为若A号人的2条件不满足则B号人的2条件必须满足和若B号人的1条件不满足则A号人的1条件必须满足。以这些要求为边,每个人的两个条件为点建一个有向图。
跑个求强连通分量,如tarjan,若发现有一个人的1,2条件在一个强联通分量里则无解,否则选择每个人两种情况中逆拓扑逆序小的,这么说是因为tarjan求出的顺序就是拓扑逆序。