SAT算法
今早用微云打的笔记...头大

我惊,这不是可爱的离散吗?!
然后用Tarjan算法缩点
手热来了一发模板题https://www.luogu.org/problem/P4782
贴
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+;
int n,m,a,b,fla,flb,cnt,head[N<<];
int dfn[N<<],low[N<<],vis[N<<],col[N<<],scnt,idx;
stack<int> st;
struct edge{
int to,next;
}e[N<<];
inline void addedge(int a,int b)
{
e[++cnt]={b,head[a]};
head[a]=cnt;
}
void tarjan(int u)
{
dfn[u]=low[u]=++idx;vis[u]=;
st.push(u);
for(int i=head[u];i;i=e[i].next)
{
if(!dfn[e[i].to]) tarjan(e[i].to),low[u]=min(low[u],low[e[i].to]);
else if(vis[e[i].to]) low[u]=min(low[u],dfn[e[i].to]);
}
if(low[u]==dfn[u])
{
scnt++;int v=-;
while(v!=u)
{
v=st.top();st.pop();
col[v]=scnt,vis[v]=;
}
}
}
int main()
{
for(scanf("%d%d",&n,&m);m--;){
scanf("%d%d%d%d",&a,&fla,&b,&flb);
int aa=fla^,bb=flb^;
addedge(a+aa*n,b+flb*n);
addedge(b+bb*n,a+fla*n);
}
for(int i=;i<=*n;i++)
if(!dfn[i]) tarjan(i);
for(int i=;i<=n;i++)
if(col[i]==col[n+i]) return puts("IMPOSSIBLE")&;
puts("POSSIBLE");
for(int i=;i<=n;i++) printf("%d%c",col[i]>col[n+i],i==n?'\n':' ');
}
然后又很智障得磕了http://acm.hdu.edu.cn/showproblem.php?pid=3062
因为初始化和下标问题还WA了半天,就简单YES、NO的我都能PE,自闭半小时
贴
#include <bits/stdc++.h>
using namespace std;
const int N=;
int n,m,a,b,fla,flb,cnt,scnt,idx,flag;
int head[N<<],dfn[N<<],low[N<<],vis[N<<],col[N<<];
stack<int> st;
struct edge{
int to,next;
}e[N*N];
void init()
{
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(vis,,sizeof(vis));
memset(low,,sizeof(low));
cnt=idx=scnt=flag=;
}
inline void addedge(int a,int b)
{
e[cnt]={b,head[a]};
head[a]=cnt++;
}
void tarjan(int u)
{
dfn[u]=low[u]=++idx;vis[u]=;
st.push(u);
for(int i=head[u];i!=-;i=e[i].next)
{
if(!dfn[e[i].to]) tarjan(e[i].to),low[u]=min(low[u],low[e[i].to]);
else if(vis[e[i].to]) low[u]=min(low[u],dfn[e[i].to]);
}
if(low[u]==dfn[u])
{
scnt++;
int v=-;
while(v!=u)
{
v=st.top();st.pop();
col[v]=scnt,vis[v]=;
}
}
}
int main()
{
while(~scanf("%d",&n))
{
scanf("%d",&m);
init();
while(m--)
{
scanf("%d%d%d%d",&a,&b,&fla,&flb);
addedge((a<<)+fla,((b<<)+flb)^);
addedge((b<<)+flb,((a<<)+fla)^);
}
for(int i=;i<*n;i++)
if(!dfn[i]) tarjan(i);
for(int i=;i<*n;i+=)
if(col[i]==col[i^]){puts("NO");flag=;break;}
if(!flag) puts("YES");
}
}
SAT算法的更多相关文章
- 世界碰撞算法原理和总结(sat gjk)
序言 此文出于作者的想法,从各处文章和论文中,总结和设计项目中碰撞结构处理方法.如有其它见解,可以跟作者商讨.(杨子剑,zijian_yang@yeah.net). 在一个世界中,有多个物体,物体可以 ...
- 学习笔记(two sat)
关于two sat算法 两篇很好的论文由对称性解2-SAT问题(伍昱), 赵爽 2-sat解法浅析(pdf). 一些题目的题解 poj 3207 poj 3678 poj 3683 poj 3648 ...
- JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
- HDU 2208 唉,可爱的小朋友(DFS)
唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- JAVA上百实例源码网站
JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...
- 算法复习——2—sat(bzoj2199)
题目: Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 ...
- 数据结构与算法 Big O 备忘录与现实
不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新. 算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...
- Adaboost算法结合Haar-like特征
Adaboost算法结合Haar-like特征 一.Haar-like特征 目前通常使用的Haar-like特征主要包括Paul Viola和Michal Jones在人脸检测中使用的由Papageo ...
- 2-SAT问题及其算法
原文地址:http://www.cppblog.com/MatoNo1/archive/2011/07/13/150766.aspx [2-SAT问题]现有一个由N个布尔值组成的序列A,给出一些限制关 ...
随机推荐
- CodeForce 855B 暴力or线段树
CodeForce 855B 暴力or线段树 题意 给你一串数,然后找出三个数,他们的前后关系和原来一样,可以相同,然后分别乘p,q,r,求他们积的和最大,并且输出这个数. 解题思路 这个可以使用线段 ...
- ssh远程钥匙对连接
1.服务器必须启动ssh服务 2.在客户机执行命令:ssh-keygen -t rsa 两次回车即可 3.在客户机家目录下的.ssh\下生成钥匙对 4.将公钥传输到要连接的服务器主机要连接的用户家目录 ...
- usleep和sleep
usleep 和 sleep 都是用于将进程挂起, 所不同的是前者在微秒级别, 后者在秒级别.
- 输入某人出生日期(以字符串方式输入,如1987-4-1)使用DateTime和TimeSpan类,(1)计算其人的年龄;(2)计算从现在到其60周岁期间,总共多少天。
http://blog.csdn.net/w92a01n19g/article/details/8764116 using System;using System.Collections.Generi ...
- C#控制文本框(TextBox)只能输入正数,负数,小数
由于项目需要,需要写一个TextBox文本框,此文本框需要满足:只能输入正数,负数和小数.比如:3,0.3,-4,-0.4等等. 在网上找了许多正则表达式都不好用,由于本人又对正则表达式 ...
- jQuery——超链接提示
在熟悉jQuery过程中,练习超链接提示显示,发现书本上有个问题,经过查询资料,修改如下: <!DOCTYPE html> <html> <head> <ti ...
- CSS高度坍塌原因及解决办法
在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高. 但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷.由于父 ...
- HTTPS证书转换成PEM格式
PEM 格式的证书文件(*.pem)一般为以下格式: 注意:PEM 格式证书文件可用 notepad++ 等文本编辑器打开. CER / CRT 格式证书转换为 PEM 格式 对于 CER / CRT ...
- nginx中break和last的区别
一.环境准备 资源文件创建 mkdir -p /opt/tmp/wqy/test/aaa mkdir -p /opt/tmp/wqy/test/bbb echo "aaa" > ...
- P2617 Dynamic Rankings(待修改区间第k大)
题目链接:https://www.luogu.org/problemnew/show/P2617 题目: 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的 ...