2-sat相关复习

noi曾经考过,谁能说得准呢

sat问题

通俗的sat问题表述一般是这样的:有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案。如果所有集合中,元素个数最多的集合有k个,那么我们就说这是一个k-sat问题。
k-sat是NP问题,当k>2时,所以在OI里,我们只讨论2-sat问题的解决。

能干啥

一般形式(模板):n个点,每个点有个01变量,给出m个限制,让你找出符合限制的一组合法解
限制条件一般为\(x_{0} \oplus {y_{0}}=0,x_1\&y_0=1\)之类的.

如何做

我们利用限制条件来构出图来
一个限制条件如果是 选\(a\)则必须选\(b\)
那么,
\(a -> b\)(显性条件)
\(b' -> a'\)(隐性条件)
就是说第一条边就是限制条件所说。
第二条边就是说选了\(b'\),则再选择了\(a\)会与条件矛盾,所以只能选择\(a'\)
这样我们构出的图就有对称性了
2-sat的构图总是有对称性的

判定&&求解

举例子
选1不选4,选2不选3,选7不选3

我们首先选1,则3,8是必须选的(4,7必须不选),5,6随便选一个
矛盾的情况就是一个组都选了(上下两个点)
然后枚举一组没有确定过的点,进行判定,如果矛盾,则选另一个a',不矛盾就选择a。
得不到答案无解,得到就是一组解
为何上面没被确定的点就可以继续判定,
也就是说这组点没有被之前的点所连,他们与之前的组是没有关系的(边即关系)
这也是得到一组字典序最小解的方法(应该是求字典序最小的唯一方法)
复杂度\(O(n*m)\)

优化求解(利用对称性)

我们发现,一个环内,要不都不要,要不都要,就是说这些点都可以用一个点表示
喂喂喂,你别忘了这是2-sat问题诶,你一个点要有两个属性诶,缩点了如何保证啊。
emm,不用管。
我们之前建边的对称有啥用呢?
如果一个环是a->b->c->d->e->a
那么根据前面建边的对称,一定有a'<-b'<-c'<-d'<-e'<-a'
那么我们就说这两个环对称
那么我们建立的新图自然就是对称的,也就保证了2-sat的两个属性。

环内如果一组都在里面,则无解(因为两个点必须有一个选和一个不选)。
那么我们先tarjan缩下点,判一下无解

我们选择了一个点,则它的所有连接着的点都要被选(还有连接着的连接着的点……),很麻烦
那我们先找入读为0的点,这么就没影响了。
就是拓扑排序,不过拓扑的是反图(边都反过来)。
不过tarjan的时候就是按拓扑序来的,所以根本不用再在写拓扑了(写也没关系啦),嘻嘻。

2-sat相关复习的更多相关文章

  1. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】

    一.创建线程的三种方式 · 继承Thread类 · 实现Runnable接口 · 实现Callable接口 二. 线程状态 · 线程名字 getName() · 线程活动情况 isAlive() · ...

  2. JAVA一些常用的时间操作

    项目中经常有对时间进行处理的需求,下面是一些常用的操作整理,方便以后再次使用以及做相关复习. 1.字符串转换为日期 /** * 字符串转换为日期 * @param dateStr 需要转换的日期 * ...

  3. Java面试集合(一)

    前言 大家好,给大家带来Java面试集合(一)的概述,希望你们喜欢 一 1.Java按应用范围可划分几个版本? 答:Java按应用范围有三个版本,分别是JavaSE,JavaEE,JavaME. 2. ...

  4. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  5. JAVA基础部分复习(一、8中基础类型,以及String相关内容)

    以下是关于java中8种基本类型的介绍说明: package cn.review.day01; /** * java基础复习,8种数据类型 * (byte,short,long,int,double, ...

  6. 浅谈C#中的 async await 以及对线程相关知识的复习

    C#5.0以后新增了一个语法糖,那就是异步方法async await,之前对线程,进程方面的知识有过较为深入的学习,大概知道这个概念,我的项目中实际用到C#异步编程的场景比较少,就算要用到一般也感觉T ...

  7. 1 复习ha相关 + weekend110的hive的元数据库mysql方式安装配置(完全正确配法)(CentOS版本)(包含卸载系统自带的MySQL)

    本博文的主要内容是: .复习HA相关 .MySQL数据库 .先在MySQL数据库中建立hive数据库 .hive的配置 以下是Apache Hadoop HA的总结.分为hdfs HA和yarn HA ...

  8. 提问式复习:图文回顾 redo log 相关知识

    原文链接:提问式复习:图文回顾 redo log 相关知识 1.如何提升 redo日志 的写性能? 为了保证 redo日志 不丢失,会在磁盘中开辟一块空间将日志保存起来.但是这样会有一个问题,磁盘的读 ...

  9. mysql复习相关

    Mysql相关 mysql增删改查 我们需要修改数据表名或者修改数据表字段时,就需要使用到Mysql Alter命令 删除,添加或修改表字段 alter table student drop regi ...

随机推荐

  1. 常见web错误码

    404表示文件或资源未找到 java WEB常见的错误代码 .1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. -继续. -切换协议. .2xx ...

  2. wordpress练习

    ---恢复内容开始--- wp_options数据表储存网站的一些基本信息 bloginfo()    //输出    bloginfo('stylesheet_url')  //输出style.cs ...

  3. GameObject.Find与Transform.Find的区别

    1.GameObject.Find 函数原型: public static GameObject Find(string name); 说明:1.GameObject只能查找到active的物体 2. ...

  4. html5-相对定位

    *{    margin: 0px;    padding: 0px;}div{    width: 300px;    height: 300px;}#div1{    background: rg ...

  5. MVC请求管道

    下面是请求管道中的19个事件. (1)BeginRequest: 开始处理请求 (2)AuthenticateRequest授权验证请求,获取用户授权信息 (3):PostAuthenticateRe ...

  6. noip200605能量项链

    题解: 状态转移方程为:dp[i][j] = max{dp[i][k] + dp[k+1][j] + a[i]*a[k+1]*a[j+1]}, k=i, ..., j-1, i和j都从1开始.dp[i ...

  7. 【Hive学习之三】Hive 函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  8. 【Hadoop学习之六】MapReduce原理

    一.概念MapReduce:"相同"的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算 块.分片.map.reduce.分组.分区之间对应关系block > ...

  9. 大数据自学5-Python操作Hbase

    在Hue环境中本身是可以直接操作Hbase数据库的,但是公司的环境不知道什么原因一直提示"Api Error:timed out",进度条一直在跑,却显示不出表. 但是在CDH后台 ...

  10. SpringMVC MultiActionController 默认方法名解析器

    MultiActionController默认方法名解析器是指在请求的地址中加入指定方法名称 MultiActionController类具有一个属性methodNameResolver,方法名解析器 ...