首页 > 其他分享 >[学习笔记] 2-SAT

[学习笔记] 2-SAT

时间:2023-07-16 16:00:58浏览次数:39  
标签:dots 变量 笔记 SCC 学习 scc 如果 SAT

一、2-SAT

2-SAT 问题是给定 \(n\) 个变量 \(x_1, x_2, \dots, x_n\),取值只有 \(0\) 或 \(1\),然后这些变量要满足一些条件,比如:如果 \(x_1 = 1\) 那么 \(x_2 = 0\) 之类的。

然后我们要解决的问题就是判定是否存在一组 \((x_1, x_2, \dots, x_n)\) 满足条件,如果存在输出方案。

考虑建图。将每个变量 \(x_i\) 建成两个点,\(i_0\) 和 \(i_1\),即 \(x_i = 0\) 和 \(x_i = 1\)。从 \(i_k\) 连到 \(j_l\) 就表示推理如果 \(x_i = k\) 那么 \(x_j = l\)。

然后我们要判断是否有解。先对原图缩强连通分量,如果 \(i_0\) 和 \(i_1\) 在同一个 SCC 里就矛盾,即无解;就是如果 \(x_i = 0\) 可以推到 \(x_i = 1\),又可以推到 \(x_i = 0\),显然矛盾。

考虑输出方案,设 \(scc_u\) 表示节点 \(u\) 所在的 SCC 的编号。如果 \(scc_{i_0} > scc_{i_1}\),那么说明 \(i_0\) 的拓扑序在 \(i_1\) 之后,说明 \(x_i = 0\),否则 \(x_i = 1\)。

标签:dots,变量,笔记,SCC,学习,scc,如果,SAT
From: https://www.cnblogs.com/RB16B/p/17557989.html

相关文章

  • 数据结构练习笔记——创建有序单链表
    创建有序单链表【问题描述】为从键盘终端输入的m个整数创建带头结点的有序单链表存储结构,使输入的数据元素在单链表中按照元素值递增有序。【输入形式】第一行:单链表中元素个数m第二行:单链表中的m个整数【输出形式】按递增有序形式输出m个整数【样例输入】513245【......
  • [微服务学习 --组件] 远程调用 Feign
    一、什么是Feign: Feign是应用在分布式系统中,可以进行远程调用,它使得调用远程服务更为简单和直观。    这个是Feign的基本流程。Feign在调用时可能会产生jdk代理对象,通过代理对象来调用远程的服务。该代理对象不仅可以接收到HTTP请求,而且还可以将相应信息封装为http请求......
  • 后端运维开发 --- 学习路线
    1.学习一种编程语言。python、ruby、nodejs、go、rust、c、c++等等2.了解计算机组成原理。进程、线程、socket、io、虚拟化、存储等等3.学习管理服务器。linux、windows、unix。shell脚本、文字处理工具(vi、vim、powershell、emacs、awk、sed、grep、sort、uniq、cat、cut、echo......
  • 后端编程开发 --- 学习路线
    1.选择一门后端语言。比如脚本语言,python、ruby、php、nodejs(typescript)。函数语言,elixir、scala、erlang、clojure、haskell。其他语言,java,.net,golang,rust。新人推荐nodejs或php。2.写一些入门程序。比如爬虫,json解析,自动化任务。3.学习依赖包管理和项目创建。比如java的maven,p......
  • AI-5 深度学习计算
    5.1块和层我们一直在通过net(X)调用我们的模型来获得模型的输出。这实际上是net.__call__(X)的简写。这个前向传播函数非常简单:它将列表中的每个块连接在一起,将每个块的输出作为下一个块的输入。importtorchfromtorchimportnnfromtorch.nnimportfunctionalasFnet......
  • vue-day21-过滤器学习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>过滤器</title><scripttype=......
  • C语言学习笔记(二)分支语句和循环语句
    分支语句和循环语句分支语句(选择结构)if语句switch语句if语句==:判断=:赋值-------------------------------------------------1---------------------------------------------------------if(条件){ 语句; ......}------------------------------------------......
  • MarkDown学习
    标题图片超链接超链接加粗aaa斜线aaa废弃aaa引用aaa分割线列表AB表格名字性别年龄小明男18代码public ......
  • C语言学习笔记2
    数组所谓数组,就是一个集合,里面存放了相同类型的数据元素特点:数组中的每个数据元素都是相同的数据类型,数组是由连续的内存位置组成的。一维数组一维数组定义方式3种:1数据类型数组名[数组长度];创建一个数组,[]里给一个常量表达式,不能是变量。2数据类型数组名[数组长度]......
  • 全网最详细4W字Flink入门笔记(下)
    本文已收录至Github,推荐阅读......