POJ 3678 2 SAT合理性判定

2021-09-29 08:51:58 字數 1037 閱讀 9355

思路:典型的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對夫婦之中可能有通姦關係 包括男男,男女,有通姦關係的不能同時坐在新娘的對面,可以分開坐,可以同時坐在新娘這一側。如果存在一種可行的方案,輸出與新娘同側的人。解...