[P4782]2-SAT问题
解题关键:2-sat模板,tarjan解决。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 2000006
#define MAXM 2000106
struct edge{
int to,nxt;
}e[MAXM];
int head[MAXN],st[MAXN],dfn[MAXN],lowest[MAXN],belong[MAXN];
bool inst[MAXN];
int n,scnt,top,tot,m;//scnt从1开始 void init(){
memset(head,-,sizeof head);
scnt=top=tot=;
} void add_edge(int u, int v){
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
} void Tarjan(int u){
dfn[u]=lowest[u]=++tot;
inst[u]=;
st[top++]=u;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
if(!dfn[v]){
Tarjan(v);
lowest[u]=min(lowest[u],lowest[v]);
}
else if(inst[v]){
lowest[u]=min(lowest[u],dfn[v]);//也可用lowest
}
}
if(dfn[u]==lowest[u]){
scnt++;
int t;
do{
t=st[--top];
inst[t]=false;
belong[t]=scnt;
}while(t!=u);
}
} int main(){
init();
int a,x,b,y;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d%d%d%d",&a,&x,&b,&y);
//左0右1
add_edge(a<<|(x^),b<<|y);//一个假,一定推出来另一个真
add_edge(b<<|(y^),a<<|x);
}
for(int i=;i<=*n+;i++){
if(!dfn[i]) Tarjan(i);
}
for(int i=;i<=n;i++){
if(belong[*i]==belong[*i+]){
puts("IMPOSSIBLE");
return ;
}
}
puts("POSSIBLE");
//构造出的解
for(int i=;i<=n;i++){
if(belong[*i]<belong[*i+]) printf("0 ");
else printf("1 ");
}
return ;
}
[P4782]2-SAT问题的更多相关文章
- 多边形碰撞 -- SAT方法
检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...
- POJ 3678 Katu Puzzle(2 - SAT) - from lanshui_Yang
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- Map Labeler POJ - 2296(2 - sat 具体关系建边)
题意: 给出n个点 让求这n个点所能建成的正方形的最大边长,要求不覆盖,且这n个点在正方形上或下边的中点位置 解析: 当然是二分,但建图就有点还行..比较难想..行吧...我太垃圾... 2 - s ...
- P4782 【模板】2-SAT 问题
https://www.luogu.org/problemnew/show/P4782 链接 https://www.luogu.org/problemnew/show/P4782 思路 选a就必须选 ...
- 学习笔记(two sat)
关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...
- P4782 【模板】2-SAT 问题 && 2-SAT问题
2-SAT到图论 \(k-SAT\) 是 k-适应性问题(Satisfiability)的简称. \(k-SAT\) 问题(除 \(k = 2\))已被证明为是 \(NP\) 完全问题, 而对于 \( ...
- 洛谷P4782 【模板】2-SAT问题 [2-SAT]
题目传送门 [模板]2-SAT问题 题目背景 2-SAT 问题 模板 题目描述 有n个布尔变量 $x_1/~x_n$ ,另有$m$个需要满足的条件,每个条件的形式都是“ $x_i$ 为$true/f ...
- LA 3211 飞机调度(2—SAT)
https://vjudge.net/problem/UVALive-3211 题意: 有n架飞机需要着陆,每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种,第i架飞机的早着陆时间 ...
- HIT 1917 2—SAT
题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...
- 2 - sat 模板(自用)
2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一 POJ 3207 Ikki's Story IV ...
随机推荐
- Android中字体颜色的设置
1.在Android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 public static final class color { public static final ...
- eclipse 创建 maven web工程
填写完点finish,创建成功 接着找到工作空间创建的这个项目,.settings文件夹下修改两个文件 改为自己的java版本,我的是1.8 将项目改为动态3.0 此时项目还没有web.xml,接下来 ...
- Spring_总结_04_高级配置(六)_Bean的初始化和销毁
一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值
- XMLSchema验证
一.什么是Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式. DTD的局限性: 1 ...
- python导入图片
一.导入图片资源 方法1:直接从源图片中导(图片位于images文件夹内) self.label1=QLabel(self)self.label1.setPixmap(QPixmap(r"i ...
- 超简单tensorflow入门优化程序&&tensorboard可视化
程序1 任务描述: x = 3.0, y = 100.0, 运算公式 x×W+b = y,求 W和b的最优解. 使用tensorflow编程实现: #-*- coding: utf-8 -*-) im ...
- linux中使用opdir_readdir读取目录中的信息
#include <dirent.h>#include <stdio.h>#include <stdlib.h> int main(int argc, char * ...
- 西瓜书概念整理(chapter 1-2)熟悉机器学习术语
括号表示概念出现的其他页码, 如有兴趣协同整理,请到issue中认领章节 完整版见我的github:ahangchen 觉得还不错的话可以点个star ^_^ 第一章 绪论 Page2: 标记(lab ...
- 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?
开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: 1: class ...
- Gradle的快速入门
1.基础知识: Gradle提供了:构建项目的框架.但是其中起作用的是Plugin. Gradle在默认情况下提供了很多常用的Plugin.例如:构建Java的Plugin.还有war.Ear等. G ...