思路:典型的2-sat合理性判定模板題
分類:1、a&b=0: 若a為1,則b必為0; 若b為1,則a必為0
2、a&b=1: 若a為0,則a必為1; 若b為0,則b必為1 //這個地方需要理解一下
3、a|b=0: a=1則a必為0; b=1則b必為0
4、a|b=1: a=0則b必為1; b=0則a必為1
5、a^b=1: a=0,則b=1;a=1則b=0;b=0,則a=1;b=1,a=0
6、a^b=0: a=0,則b=0;a=1,則b=1;b=0,則a=0;b=1,則a=1
//2-sat合理性判定
#include#include#include#include#includeusing namespace std;
const int n = 2e3 + 10;
const int m = 1e7 + 10;
int head[n], tot;
int n, m;
int sccno[n], scc_cnt, dfn[n], low[n], idx;
stackst;
struct edge e[m];
void add(int u, int v)
void dfs(int u)
else if (!sccno[v])
low[u] = min(low[u], dfn[v]);
} if (dfn[u] == low[u]) }}
bool find_scc()
for (int i = 1; i <= n; i++)
return true;
}int main()
else
} else if (op[0] == 'o')
else
} else if (op[0] == 'x')
else
} }printf(find_scc() ? "yes\n" : "no\n");
return 0;
}
POJ3648 2SAT解的求得
include include include include include include using namespace std const int nn 100 const int mm 1000 struct twosat void addedge int u,int v void tar...
poj 2723 2 SAT(鎖開鑰匙救人)
題意 某人要去乙個地方救朋友。已知他有n對鑰匙,一共2n把。要求每對鑰匙只能選一把來用。有m個門,每個門有2把鎖,只要開啟其中的一把鎖就能開啟這個門。見到門的順序和輸入一致。給定鑰匙資訊以及每扇門上的兩把鎖的資訊,問如何選擇鑰匙能夠開啟最多的門。思路 因為有2n把不同鑰匙,所以圖的節點有4n個。如果...
POJ3648 2 sat強連通縮點法
題意 有一對新人結婚,邀請n對夫婦去參加婚禮。有一張很長的桌子,人只能坐在桌子的兩邊,還要滿足下面的要求 1.每對夫婦不能坐在同一側 2.n對夫婦之中可能有通姦關係 包括男男,男女,有通姦關係的不能同時坐在新娘的對面,可以分開坐,可以同時坐在新娘這一側。如果存在一種可行的方案,輸出與新娘同側的人。解...