题意大白书

二分答案,然后对于每个可能的答案,跑一遍2-SAT就好了。

#include <iostream>
#include <string.h>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=+;
struct TwoSAT{
int n;
vector<int >G[maxn*];
bool mark[maxn*];
int S[maxn*],c;
bool dfs(int x){
if(mark[x^]) return false;
if(mark[x]) return true;
mark[x]=true;
S[c++] =x;
for(int i=; i<G[x].size(); ++i)
if(!dfs(G[x][i])) return false;
return true;
}
void inti(int n){
this->n=n;
for(int i=; i<n*; i++)
G[i].clear();
memset(mark,,sizeof(mark));
}
void add_clause(int x, int xval, int y, int yval){
x = x * + xval;
y = y * + yval;
G[x^].push_back(y);
G[y^].push_back(x);
}
bool solve(){
for(int i=; i< n*; i+=)
if(!mark[i] && !mark[i+]){
c=;
if(!dfs(i)){
while(c>) mark[S[--c]] = false;
if( !dfs(i+) ) return false;
}
}
return true;
}
}solver;
int n,T[maxn][];
bool test(int diff){
solver.inti(n);
for(int i=; i<n; ++i)
for(int a=; a<; ++a)
for(int j=i+; j<n; ++j)
for(int b=; b<; ++b)
if(abs(T[i][a]-T[j][b])<diff)
solver.add_clause(i,a^,j,b^);
return solver.solve();
}
int main()
{
while(scanf("%d",&n)== && n){
int L=, R=;
for(int i=; i<n; ++i)
for(int a=; a<; ++a){
scanf("%d",&T[i][a]);
R=max(R,T[i][a]);
}
while(L<R){
int M = L + ( R - L +)/;
if(test(M)) L=M; else R=M-;
}
printf("%d\n",L);
}
return ;
}

uva1146 2-SAT问题的更多相关文章

  1. 多边形碰撞 -- SAT方法

    检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...

  2. POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang

    Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...

  3. Map Labeler POJ - 2296(2 - sat 具体关系建边)

    题意: 给出n个点  让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...

  4. 学习笔记(two sat)

    关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...

  5. LA 3211 飞机调度(2—SAT)

    https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...

  6. HIT 1917 2—SAT

    题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...

  7. 2 - sat 模板(自用)

    2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一  POJ 3207 Ikki's Story IV ...

  8. SAT考试里最难的数学题? · 三只猫的温暖

    问题 今天无意中在Quora上看到有人贴出来一道号称是SAT里最难的一道数学题,一下子勾起了我的兴趣.于是拿起笔来写写画画,花了差不多十五分钟搞定.觉得有点意思,决定把解题过程记下来.原帖的图太小,我 ...

  9. 世界碰撞算法原理和总结(sat gjk)

    序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...

  10. hdu 4115 (2—SAT)

    题意:两个人石头剪刀布,一个人的出法已确定,另一个人的出法有一定约束,某两次要相同或者不同,问你第二个人能否全部都不失败. 思路:根据Bob出的情况,我们可以确定每次Alice有两种方案. R与P,S ...

随机推荐

  1. 利用maven将jar包添加到本地仓库中

    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar ...

  2. EL表达式各种函数使用大全

      引入<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ...

  3. WPS Word查询某些内容的出现次数

    1.CTRL+F 打开查找窗体

  4. TP框架控制器的空操作

    在浏览器中输入tp框架入口文件的地址,如图 要注意,localhost/后面跟的是www的下一级,tp文件的上一级,因为我直接把tp文件做成了www目录的下一级,所以我写的地址localhost后面跟 ...

  5. poj_3274 哈希

    哈希 Hash 哈希是一种将复杂数据转换为线性数据从而可以进行随机访问的查找算法. 哈希经常用于对复杂数据(如结构体.对象等)的查找,在使用的时候,需要定义一个Hash函数,将需要查找的复杂对象转化为 ...

  6. c++ 函数返回研究[转]

    一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功. 2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象.用函数返回值初始化临时对 ...

  7. JS-两周内自动登录功能

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 超级小的web手势库AlloyFinger

    针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持,也不用再担心click 300ms的延迟了.拥有两个版本,无依赖的独立版和react版本.除了Dom对象,也可监听Canvas ...

  9. go练习2-go的学习资料

    好吧 我承认,有自己添加的内容也有从别人的blog 中 ctrl + c 的 官方:http://golang.org ,经常被封 中文手册的翻译:http://code.google.com/p/g ...

  10. Mac/Xcode - 开发技巧快捷键

    Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...