2-SAT

2-SAT问题 阅读详情

  有N个布尔变量xi,另有M个需要满足的条件,每个条件的形式都是xi为真/假或xj为真/假。2-SAT问题的目标是给每个变量赋值,使所有条件得到满足。

  把每个变量xi拆成两个节点2i和2i+1,分别表示xi为假和xi为真,这两个只能有一个被标记。对于xi为假或xj为假这样的条件,连一条有向边从2i+1->2j,2j+1->2i,表示如果xi为真的话xj必须为假,xj为真的话xi必须为假。建完图之后搜索,先假设xi为假,标记2i,DFS把和2i相连的点都标记,中途如果遇到遇到j和j^1都标记了说明矛盾了,返回false。如果把xi标记为假失败,再尝试把xi标记为真,重新搜索。如果真假都不行则无解。

struct TwoSAT{
    int n,c,S[MAXN*2];
    vector<int> G[MAXN*2];
    bool mark[MAXN*2];
    void init(int n){
        this->n=n;
        for(int i=0;i<n*2;i++) G[i].clear();
        memset(mark,0,sizeof(mark));
    }
    bool dfs(int x){
        if(mark[x^1]) return false;
        if(mark[x]) return true;
        mark[x]=true;
        S[c++]=x;
        int L=G[x].size();
        for(int i=0;i<L;i++) if(!dfs(G[x][i])) return false;
        return true;
    }
    //x为假或y为假
    void add_clause(int x,int xval,int y,int yval){
        x=x*2+xval; //x为假时的值
        y=y*2+yval; //y为假时的值
        G[x^1].push_back(y);  //x为真时y必须为假
        G[y^1].push_back(x);  //y为真时x必须为假
    }
    bool solve(){
        //先假设x[i]为假,如果不行再判断x[i]为真是否可以,如果还是不行返回false
        for(int i=0;i<n*2;i+=2) if(!mark[i]&&!mark[i+1]){
            c=0;
            if(!dfs(i)){
                while(c>0) mark[S[--c]]=false;
                if(!dfs(i+1)) return false;
            }
        }
        return true;
    }
}



【NPC】2 SAT规约到3SAT 阅读详情

相关推荐

2-SAT简介

前方是2-SAT蒟蒻版(大雾) 蒟蒻不会打代码啊QAQ,代码有参考 配合洛谷食用风味更佳 2-SAT, 就是2-Satisfiability。 Satisfiability,可满足性。 背景故事 我要请大家开party!–ObliaObliaOblia ObliaObliaOblia这样想。 因为ObliaObliaOblia是萌妹子同时是OIer和MOer,所以她可以同时邀请到OI和MO的神...

Rorelynn的博客 992

【图论】2-SAT

给出一个类似于这样的式子,让你找出满足条件的一个解,这样的问题就是SAT问题,因为每一个括号内都有三个被限制的变量,所以这叫做3-SAT问题(是因为括号内的变量数有3个才叫3-SAT,不是因为abc才叫3-SAT)所以2-SAT也很好理解,就叫做 2-SAT 问题可以证明 3-SAT 及以上的问题只能用暴力枚举解决(我也不知道怎么证明),所以我们只讨论2-SAT问题。

Texcavator的博客 1949

2SAT问题解题报告

2SAT是P问题,能在多项式时间内解决。这里对方法之一进行总结。 测试数据格式如下: 1000000 -383037 -585864 575603 -494722 -628477 805085 -502855 685868 923336 -606921 -653863 424389 333542 -656925 -809061 874253 即范围为1~1000000,“

thestoryofsnow的专栏 2156

【总结】2-SAT

一、2-SAT 简介:    SAT是适定性(Satisfiability)问题的简称 。一般形式为k-适定性问题,简称 k-SAT。 当k>2时,k-SAT是NP完全的。因此一般讨论的是k=2的情况,即2-SAT问题。 2-SAT就是2判定性问题(条件只有一个,不是这个就

慢慢前行,跨越预言 1642

(易懂)浅谈2-SAT

啥是2-SAT? SAT的定义:百度百科,布尔可满足性问题。 但百度百科上面的解释又臭又长,比较专业,难以看懂。 实际上,2-SAT是SAT的一个特殊化的版本,这里有一个通俗化的解释: 有多个布尔元素(只能为truetruetrue或falsefalsefalse),给出多个条件,每个条件形如 (not)x opt (not)y=true/false(not) x\ opt\...

fengqiyuka的博客 2384

【逆向实战】Unity游戏资源提取与解密全攻略:从AssetBundle到libil2cpp.so的破解技巧

本文详细介绍了Unity游戏资源提取与解密的完整流程,涵盖从AssetBundle到libil2cpp.so的破解技巧。通过AssetStudio和Il2CppDumper等工具,读者可以学习如何提取未加密资源、处理加密文件,并掌握动态dump技术。文章还提供了自动化脚本编写和常见问题解决方案,帮助逆向工程爱好者高效完成资源提取任务。

weixin_29012765的博客 1046

G2SAT: Learning to Generate SAT Formulas论文精读

这篇文章所提出的G2SAT框架以一组公式为输入,学习SAT公式的生成。文章使用二部图的表示形式对SAT公式进行建模,以图和SAT求解器两种度量展示了其生成的SAT公式的现实的SAT实例的相似性。更重要的是,使用其生成的SAT公式,能够提升现有SAT求解器的求解性能。

qq_43616091的博客 1162

MT6768平台Sensor Bring Up全流程实战:从驱动添加到问题排查(附避坑指南)

本文详细介绍了联发科MT6768平台Sensor Bring Up的全流程实战指南,从驱动添加、硬件配置到问题排查,提供了全面的避坑建议。内容涵盖环境准备、驱动文件集成、硬件接口配置、编译系统适配以及常见问题解决方案,帮助开发者高效完成传感器集成与调试工作。

weixin_30374009的博客 416

2-SAT相关

2-SAT算法相关 2-SAT算法的主要思想与例题练习

C_eeking的博客 5448

华中科技大学 计算机组成原理 educoder Logisim平台 计算机数据表示实验

本文主要是对 计算机数据表示实验的笔记和相关Logisim平台的图,供大家学习交流使用。 需要源文件或者源代码,可以留言评论! 目录实验目的第1关:汉字国标码转区位码实验第2关:汉字机内码获取实验第3关:偶校验编码设计第4关:偶校验解码电路设计第5关:16位海明编码电路设计第6关:16位海明解码电路设计第7关:海明编码流水传输实验第8关:16位CRC并行编解码电路设计第9关:CRC编码流水传输实验实验结果: 实验目的 本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换

weixin_48383580的博客 2万+

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

2-sat基础

2-sat和一些题目

qq_52406324的博客 1932

OPC UA协议深度解析 + C#跨平台实战:无缝对接西门子S7-1200/1500 PLC

本文完成了OPC UA协议深度解析→西门子PLC服务端配置→C#跨平台客户端开发→全平台部署拆解OPC UA核心模型与安全机制,从原理层面理解工业标准化通信逻辑基于官方SDK开发工业级客户端,支持读写、订阅、证书管理、心跳保活核心功能实现Windows、Linux、统信UOS全平台兼容,满足工控系统国产化改造刚需提供完整的优化方案与踩坑指南,可直接落地商用项目。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 518

2-SAT的一些小结

///1  2-SAT问题,通俗的说就是有n对点(2n个点),从每对点中选出一个点,共选出n个点,而且要满足若干个这样的条件:某两点不能同时被选出。     设一对点为x、~x,如果a被选出则b一定要被选出,就在图中加有向弧(a,b)表示这种关系。那么如果a,b(a!=b,a!=~b)不能同时被选出,那么加两条有向弧(a,~b),(b,~a)。这样由图的对称性可以证明,2-SAT有解等价于任取

lethic的专栏 4109

【CUDA编程部署教程】第一章:GPU架构与CUDA编程核心 1

我们将剖析现代GPU的计算心脏——流式多处理器(SM),理解其独特的Warp执行模型,探索Tensor Core带来的革命性矩阵运算加速,并深入探讨决定性能命脉的内存体系。当必须访问全局内存时,则必须遵循**合并访问(Coalesced Access)**的原则,即让一个Warp内的32个线程访问连续的内存地址,从而让硬件将多次访问合并为一次高效的内存事务,以充分利用带宽。SM的调度器以Warp为单位分派指令,在一个Warp内,所有32个线程在同一时刻执行完全相同的指令,但处理的数据不同,这种模型被称为。

VectorShift的博客 220

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1676

【算法/图论】2-SAT问题详解

要求出强连通分量,就需要对原图进行缩点,顺便可以求出得到的有向无环图的拓扑序。数组存储每个节点的染色,实际上就是有向无环图的逆拓扑序(因为在DFS树中越深的节点越先被染色)。没有出现某个变量及其否定在同一个强连通分量的情况,所以是可满足的。...

qaqwqaqwq的博客 9653

TC397 EB MCAL开发从0开始系列 之 [15.1] Fee配置实战 - 双扇区demo

TC397 EB MCAL Fee模块实战之双扇区配置使用

yy九歌的博客 1126

2-SAT小白入门

1.什么是2-SAT 解释2-SAT之前先解释下什么是SAT,SAT就是Satisfiability的缩写,就是给出一个合取范式(离散数学中的概念,大概就是这样的形式:(?∨\lor∨?∨\lor∨?……)∧\land∧(?∨\lor∨?∨\lor∨?……)∧\land∧(?∨\lor∨?∨\lor∨?……)……),找出一种方案,使得它为真。那么2-SAT就是在每个括号内只有两个限制,像这样(?∨\lor∨?)∧\land∧(?∨\lor∨?)∧\land∧(?∨\lor∨?)……的形式。 2.如何解决2-

WarmheartedYang的博客 641

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

图论 —— 2-SAT 问题

【问题概述】 2-SAT问题是这样的:有n个布尔变量xi,另有m个需要满足的条件,每个条件的形式都是“xi为真/假或者xj为真/假“ SAT 是适定性(Satisfiability)问题的简称,一般形式为:k-适定性问题,简称:k-SAT。 当 k>2 时,k-SAT 是 NP 完全的,因此一般讨论的是 k=2 的情况,即:2-SAT 问题。 关于 2-SAT 问题,简单的来说就是给...

Alex_McAvoy的博客 9221

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2-SAT 问题

后缀数组 (suffix(suffix(suffix array)array)array)

diker 的博客 655

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: uva11324 - The Largest Clique 有向图强连通分量+缩点+DP
下一篇: uva1391 - Astronauts 2-SAT
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值