摘要: 【题意】这个函数是给A求B的,现在给你B,问你是否能有A的解存在。【2-SAT解法】 对于每个A[i]的每一位运行2-sat算法,只要跑到强连通就可以结束,应为只要判断是否有解,后面拓扑求解就不需要了。构图和算法思想和基本的2-sat一致,详见我的2-sat博文。 1 #include 2 #include 3 inline int min(int a,int b){return a>b?b:a;} 4 struct edge 5 { 6 int v,next; 7 edge(int d=0,int n=-1):v(d),next(n){} 8 vo... 阅读全文
posted @ 2013-08-22 12:32 wuminye 阅读(757) 评论(0) 推荐(0) 编辑
摘要: 在实际问题中2-SAT问题在大多数时候表现成以下形式:有2N个物品,每2个分为一组,现在要选出N种物品,同组物品不能同时选取,问你在满足题目要求的情况下能不能按规则选出物品,如果可以,那么可能的方案是什么。 在本质中是这样的:对于一个合取范式,是否有一种输入使得他的输出是1,具体点就是类似这样的布尔表达式(x1 or x2 or x3)and(x3 or x4)and(not x1 or x5)对于所有的x是否有一种01取值,使得最后的结果是1。【建模】 建立一个2N阶的有向图,其中的点分为N对,每对点表示布尔序列A的一个元素的0、1取值(以下将代表A[i]的0取值的点称为i,代表A[i]的. 阅读全文
posted @ 2013-08-22 10:47 wuminye 阅读(310) 评论(0) 推荐(0) 编辑