POJ PKU 3678 2-SAT之二
(2010-07-30 15:49:47)
标签:
pojpku36782-satit |
分类: 图论 |
poj 六道2-sat第二题:
题目描述:
一些点,点的取值可以是0或者1,没有告诉你具体取值。
一些边,有权值,有运算方式(并,或,异或),要求和这条边相连的两个点经过边上的运算后的结果是边的权值。
问你有没有可能把每个点赋值满足所有边的要求。
解题报告:
每个点只有0,1两种值,并且和边对面的点有约束条件,所以可以转化为2-sat问题。
令i表示点i去0,i + n表示点i取1.
点i与点j and 等于0时。 i + n -> j, j + n -> i
and 等于 1时,要求i和j必须为1,不能为0.
不能为0的处理时:如果i取0,那么i就要取1.
即:i -> i + n。
剩下的就是类似的方法了,具体见代码。
代码如下:
#include<iostream>
using namespace std;
#define size 2100
int v[size], cnt;
struct edge{int to, next;}e[3000000];
void insert(int from, int to)
{
}
int index, dfn[size], low[size], instack[size], sta[size],
top;
int belong[size], cntnum;
void tarjan(int id)
{
}
int n, m, a, b, c;
char str[7];
int main()
{