首页 > 其他分享 >2-SAT

2-SAT

时间:2023-08-23 22:11:51浏览次数:32  
标签:False 变量 int back True SAT

SAT是是适定性(Satisfiability)问题的简称。一般形式为 k - 适定性问题,简称 k-SAT。而当\(k>2\)时该问题为 NP 完全的。

定义

有 \(n\) 个布尔变量 \(x_1\)\(\sim\)\(x_n\),另有 \(m\) 个需要满足的条件,每个条件的形式都是 「\(x_i\) 为 true / false 或 \(x_j\) 为 true / false」。比如 「\(x_1\) 为真或 \(x_3\) 为假」、「\(x_7\) 为假或 \(x_2\) 为假」。

\[(x_i\or x_j) \and(\neg x_i\or x_j)\cdots \]

注意这里的或为排斥或

2-SAT 问题的目标是给每个变量赋值使得所有条件得到满足。

Tarjan SCC 缩点

把每个变量拆成两个点,\(X(True)\)和\(X(False)\)。比如现在有一个要求\(X|Y=True\),则把\(X(False)\)到\(Y(True)\)连一条边,把\(X(True)\)到\(Y(False)\)连一条边。连出来的图是对称的,然后跑一遍 Tarjan,如果存在某个变量的两个点在同一个强连通分量中的情况,则无解,否则有解。

构造方案时,我们可以通过缩点后的拓扑序确定变量的值。如果变量\(x\)的拓扑序在\(\neg x\)之后,则取\(x\)为真,反之取\(x\)为假。注意 Tarjan 求得的 SCC 的编号相同与反拓扑序。

// luogu P4782
int32_t main() {
    int n, m, N;
    cin >> n >> m, N = n * 2 + 2;
    e.resize(N);
    dfn = inStk = low = scc = vector<int>(N);
    capacity.push_back(0);
    for (int i, a, j, b; m; m--) {
        cin >> i >> a >> j >> b;
        e[2 * i + (a ^ 1)].push_back(2 * j + b);
        e[2 * j + (b ^ 1)].push_back(2 * i + a);
    }
    for (int i = 2; i <= n * 2 + 1; i++)
        if (!dfn[i])
            tarjan(i);
    vector<int> res(n + 1);
    for (int i = 1; i <= n; i++) {
        if (scc[i * 2] == scc[i * 2 + 1])
            cout << "IMPOSSIBLE\n", exit(0);
        else if (scc[i * 2] > scc[i * 2 + 1])
            res[i] = 1;
    }
    cout << "POSSIBLE\n";
    for (int i = 1; i <= n; i++)
        cout << res[i] << " ";
    cout << "\n";
    return 0;
}

标签:False,变量,int,back,True,SAT
From: https://www.cnblogs.com/PHarr/p/17652900.html

相关文章

  • 7月4日 Satellites
    Satellites#include<iostream>#include<cmath>usingnamespacestd;intmain(){constdoublepi=3.14159265358979323846;constdoubleearthR=6440;doublea=0,s=0;std::stringstr="";while(std::cin>>s......
  • 美国英语情景对话大全American Situational Conversations
    美国英语情景对话大全AmericanSituationalConversations 发布时间: 2011-10-28 阅读量: 1885(1).IntroductiosandOpeningConversations介绍和开场白PeopleintheUnitedStatesdon'talwaysshakehandswhentheyareintroducedtooneanother.......
  • 4. 企业组织 Business Organisation
    BusinessTransaction商业交易Anexchangeofvaluebetweentwoormoreparties.SeparateEntity独立实体常见三种企业实体SoleProprietorship/SoleTrader个体企业(unlimitedliability)Partnership合伙企业(普通合伙人有限责任,有限合伙人有限责任)Corporation......
  • 简化版本的kissat--Sat Solver SATCH
       SatSolverSATCHThisisthesourcecodeofSATCHaSATsolverwrittenfromscratchinC.Theactualversionnumbercanbefoundin VERSION andchangesinthelatestreleasearedocumentedin NEWS.md.Themainpurposeofthissolveristoprov......
  • 读取xls文件时报错 Initialisation of record 0x203(NumberRecord) left 4 bytes rema
    项目背景:公司的一个客户报告项目需要同步及抽取客户方的文件数据,文件类型为xls格式,文件为客户方的第三方厂商系统批量生成,工具及方法不明问题:读取该类xls文件后,无法成功创建Workbook,报错提示“Initialisationofrecord0x203(NumberRecord)left4bytesremainingstilltob......
  • 参考文献列表:Mixed-type conversation
    TowardsTopic-GuidedConversationalRecommenderSystemRecInDial:AUnifiedFrameworkforConversationalRecommendationwithPretrainedLanguageModelsRLPROMPT:OptimizingDiscreteTextPromptswithReinforcementLearningCodeRL:MasteringCodeGeneratio......
  • SDGSAT-1 GUI数据
    LH.tif有三个波段,前两个波段分别对应的是PL、PH,最后那个波段是PL和PH的加权和,即PL和PH波段各占50%。其实PL和PH的差别并不明显,都是全色波段,他们的数值相差也不多。只不过一个是针对低照度、一个针对高亮区域,比如说城市中心。RGB的话,其实是放在一起使用的。很明显的可以看出来不同......
  • 浅谈 2-SAT
    SAT是适定性(Satisfiability)问题的简称。一般形式为k-适定性问题,简称k-SAT。而当\(k>2\)时该问题为NP完全的。所以我们只研究\(k=2\)的情况。而2-SAT问题一般指的是,有\(n\)个布尔变量\(x_1,x_2\dotsx_n\),现在有若干个二元的运算,是对于\(x_i,\negx_i,x_j\neg......
  • [React Typescript] Ensure correct inference for prop types with satisfies & Comp
    import{ComponentProps}from"react";import{Equal,Expect}from"../helpers/type-utils";constbuttonProps={type:"button",//@ts-expect-errorillegalProperty:"IAMILLEGAL",}asconstsatisfiesC......
  • (转)突发传输强劲,WD SATAIII绿盘
    突发传输强劲,WDSATAIII绿盘全国首测   作者:D   SATAIII时代来临:绿盘首款SATAIII上市作为全球第一的硬盘厂商,西部数据在产品上的领先性给我们带来过许多的惊喜。在SATAIII接口全面普及之后,西部数据也是将旗下产品进行了全面升级,但是在售价上却并没有任何的改变,这也是让......