传送门

2-SAT的板子

把每一个点拆成选0或选1

条件为$x_i$为$a$或$x_j$为$b$,那么如果$x_i$不为$a$则$x_j$必为$b$,同理$x_j$不为$b$则$x_i$必为$a$

那么从$x_i$不为$a$的点向$x_j$为$b$的点连边,从$x_j$不为$b$的点向$x_i$为$a$的点连边

然后跑一个tarjan缩点,在新的DAG的反图上跑一遍拓扑排序,如果有一个点的两个取值在同一个强连通分量里就无解,否则取两个取值中拓扑序小的那一个

有一个小技巧就是tarjan缩点时的编号实际就是新的DAG的反图拓扑序,那么只要看两个取值谁的拓扑序更小取谁就行了

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 using namespace std;
 5 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 6 char buf[1<<21],*p1=buf,*p2=buf;
 7 template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
 8 inline int read(){
 9     #define num ch-'0'
10     char ch;bool flag=0;int res;
11     while(!isdigit(ch=getc()))
12     (ch=='-')&&(flag=true);
13     for(res=num;isdigit(ch=getc());res=res*10+num);
14     (flag)&&(res=-res);
15     #undef num
16     return res;
17 }
18 char sr[1<<21],z[20];int C=-1,Z;
19 inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
20 inline void print(int x){
21     if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;
22     while(z[++Z]=x%10+48,x/=10);
23     while(sr[++C]=z[Z],--Z);sr[++C]=' ';
24 }
25 const int N=2e6+5;
26 int head[N],Next[N],ver[N],tot;
27 inline void add(int u,int v){
28     ver[++tot]=v,Next[tot]=head[u],head[u]=tot;
29 }
30 int dfn[N],bl[N],low[N],st[N],top,num,cnt,n,m;
31 void tarjan(int u){
32     dfn[u]=low[u]=++num,st[++top]=u;
33     for(int i=head[u];i;i=Next[i]){
34         int v=ver[i];
35         if(!dfn[v]) tarjan(v),cmin(low[u],low[v]);
36         else if(!bl[v]) cmin(low[u],dfn[v]);
37     }
38     if(low[u]==dfn[u]) for(++cnt;st[top+1]!=u;--top) bl[st[top]]=cnt;
39 }
40 int main(){
41 //    freopen("testdata.in","r",stdin);
42     n=read(),m=read();
43     for(int i=1;i<=m;++i){
44         int a=read(),b=read(),c=read(),d=read();
45         add(a+(!b)*n,c+d*n),add(c+(!d)*n,a+b*n);
46     }
47     for(int i=1,l=n<<1;i<=l;++i) if(!dfn[i]) tarjan(i);
48     for(int i=1;i<=n;++i)
49     if(bl[i]==bl[i+n]) return puts("IMPOSSIBLE"),0;
50     puts("POSSIBLE");
51     for(int i=1;i<=n;++i) print(bl[i+n]<bl[i]);
52     Ot();
53     return 0;
54 }

转载于:https://www.cnblogs.com/bztMinamoto/p/9785768.html

P4782 【模板】2-SAT 问题相关推荐

  1. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

  2. Luogu P4782 【模板】2-SAT 问题(2-SAT)

    P4782 [模板]2-SAT 问题 题意 题目背景 \(2-SAT\)问题模板 题目描述 有\(n\)个布尔变量\(x_1\sim x_n\),另有\(m\)个需要满足的条件,每个条件的形式都是&q ...

  3. Spring JDBC-NamedParameterJdbcTemplate模板类

    概述 示例 BeanPropertySqlParameterSource 使用示例 MapSqlParameterSource使用示例 NamedParameterJdbcTemplate 支持 in ...

  4. HDU 3062 Party(2-sat题模板+tarjan )

    题目: 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的.有没有可 ...

  5. 模板:2-SAT问题

    文章目录 前言 实现 代码 所谓2-SAT,就是解决两个SAT的问题 (逃) 前言 SAT 是适定性(Satisfiability)问题的简称.一般形式为 k - 适定性问题,简称 k-SAT.而当 ...

  6. 子模板继承父模板示例_模板设计模式示例

    子模板继承父模板示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重 ...

  7. python小程序模板——阿龙的小百宝箱

    requests模板 import requests url='' params={} response=requests.get(url,params).text print(response) w ...

  8. 23_字符串的格式化_format 函数_% 占位符 _ f-string _Template _模板字符等

    文章目录 23.字符串的格式化 Resource `format()` 讲解 replacement_field 语法说明 format_spec 语法说明 符号系统 分组选项(关于整个的语法 如何对 ...

  9. 【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day

    什么是2-SAT? SAT是适定性(Satisfiability)问题的简称 .一般形式为k-适定性问题,简称 k-SAT. 可以证明,当k>2时,k-SAT是NP完全的.因此一般讨论的是k=2 ...

  10. 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)

    你好呀ヾ(≧▽≦*)o 我是繁凡さん 这两年来我写了很多长篇文章,主要涉及数据结构,算法,程序设计竞赛,数学,计算几何等方面的内容: <数据结构>C语言版(清华严蔚敏考研版) 全书知识梳理 ...

最新文章

  1. js_sl 延迟菜单
  2. c# BackgroundWorker组件介绍(属性、方法、事件)
  3. fMRI在认知心理学上的研究
  4. SVN错误---Authorization failed
  5. PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
  6. linux查找替换grep以及正则表达式
  7. 苹果AirPods 2新爆料:无线充电盒重量增加 支持快速充电
  8. 如何从程序员到架构师?
  9. 让服务器自动从HG版本库中下载代码
  10. jquery事件绑定和解除绑定bind、unbind、one
  11. 对 SharePoint WebService 的调用
  12. 并发编程-基础概念介绍
  13. IOS 项目性能优化
  14. 3DES加密解密方法
  15. python pip安装镜像源
  16. 【搬家】写一个技术博客
  17. Python数据分析-绘图-2-Seaborn进阶绘图-6-回归图
  18. android webview goback 刷新,解决webview调用goBack()返回上一页自动刷新闪白的情况
  19. Android 网络检测
  20. Day3--搭建微信公众号管理系统

热门文章

  1. 求方阵的鞍点(即在行最小列最大的那个点)
  2. rpa操作excel_何必绞尽脑汁,RPA应用场景不用想!
  3. Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生产实践
  4. 就你赚的那点钱,我们家哪里有能力请护工?
  5. mysql opxe_PXE安装系统
  6. oracle无网安装报错ins,安装Oracle数据库时的报错处理[INS-35172]
  7. 常见报错_mysql常见报错之SELECT list is not in GROUP BY clause
  8. 2017年10月份计算机网络管理,2017年下半年网络管理员考试上午试题及答案
  9. 连续竞价java_Java 方法method
  10. 掉价最快的手机排行榜_如何看待2020第一季度手机销量数据。