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. hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection

      hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection   这个问题一般是在hadoop2.x版本里会出 ...

  2. Java -- 深入浅出GC自动回收机制

    1,去年开春去美团和58同城面试的时候第一个问题基本上都是来说说 Java GC机制,当时年轻的我也很耿直,直接说不会,现在想想还是当时年轻啊.刚好这段时间被各大论坛的面试题刷屏,见到最多的也是也是这 ...

  3. codeforces 980A Links and Pearls

    题意: 有珍珠和线,问能否重新安排使得相邻珍珠之间的线的数量相等. 思路: 首先,珍珠为0或者线为0,那么都满足条件: 其次,如果珍珠的个数大于线的个数,那么肯定不满足条件: 然后,如果线的个数能够被 ...

  4. maven工程的common模块jar上传至仓库并被其它模块依赖

    .parent pom和common pom 都需要添加 <distributionManagement> <repository> <id>nexus</i ...

  5. 20155228 获取技能的成功经验和关于C语言学习的调查

    内容提要 你有什么技能比大多人(超过90%以上)更好?针对这个技能的获取你有什么成功的经验?与老师博客中的学习经验有什么共通之处? 有关C语言学习的调查 你是怎么学习C语言的?(作业,实验,教材,其他 ...

  6. win10 Xshell5连ubuntu服务器

    相当于ubuntu做服务器,win10远程访问,同一局域网下,完全参考度娘 教你怎么使用xshell远程连接linux服务器 ubuntu系统ifconfig -a查看ip地址,添加到主机那里,连接时 ...

  7. mysql 问题:连不上

    问题描述: 客户端报错: MySQL Authentication plugin ‘caching_sha2_password’ cannot be loaded 解决方式: ALTER USER ' ...

  8. 使用函数式编程消除重复无聊的foreach代码(Scala示例)

    摘要:使用Scala语言为例,展示函数式编程消除重复无聊的foreach代码. 难度:中级 概述 大多数开发者在开发生涯里,会面对大量业务代码.而这些业务代码中,会发现有大量重复无聊的 foreach ...

  9. Spring源码阅读(四)

    我们知道,在spring bean生命周期中,我们可以在不同阶段执行处理器或者方法,比如init-method,destroy方法,BeanPostProcessor接口等.那么这些处理器或方法的执行 ...

  10. 设计模式之Facade(外观)(转)

    Facade的定义: 为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connec ...