题意:给定一些变量告诉你他们之间的表达式包括其中的and or xor 然后让你计算是不是有满足的解。
思路:典型的2—SAT问题,首先我是把所有的逻辑表达式化简成->表示然后再a->b之间建立一条边。接着套模版就OK了。
代码如下:
1 //2014-01-21-14.47 2 //2-SAT 3 #include4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b) 13 #define PB(a) push_back(a) 14 15 using namespace std; 16 17 typedef long long ll; 18 typedef pair pii; 19 typedef pair puu; 20 typedef pair pid; 21 typedef pair pli; 22 23 const int INF = 0x3f3f3f3f; 24 const double eps = 1e-6; 25 const int LEN = 1010; 26 vector Map[LEN]; 27 bool mark[LEN*2]; 28 int S[LEN*2], c; 29 30 bool dfs(int x) { 31 if(mark[x^1]) return false; 32 if(mark[x]) return true; 33 mark[x] = true; 34 S[c++] = x; 35 for(int i=0; i