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,给出一些限制关 ...
随机推荐
- HTML+CSS ,原型
此图是别人所作
- 3183 RMQ / 贪心(坑成。。)
题意:删去m个数,使剩下的数组成的数最小 题解 :贪心 , RMQ RMQ解法,建st表找,用rmq找最小值的下标,注意点 ,因为最小值是区间最右最小值,所以应该改成 <= 而不是< mi ...
- [WPF自定义控件库] 关于ScrollViewer和滚动轮劫持(scroll-wheel-hijack)
原文:[WPF自定义控件库] 关于ScrollViewer和滚动轮劫持(scroll-wheel-hijack) 1. 什么是滚动轮劫持# 这篇文章介绍一个很简单的继承自ScrollViewer的控件 ...
- Windows 中下载 Android Q 源码
1. 安装软件 1.1. 安装 git A.git官网下载:https://git-scm.com/downloads/ 安装git到如下路径 C:/Program Files/Git B.图 ...
- Linux常用指令全集
Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linux管道 Linux软件包管理 vim使用 用户及用户组管理 文件权限管理 大牛笔记-www.weix ...
- 06-JavaScript简介
### 前段三大块 ```HTML css JavaScript``` ### 什么是JavaScript? JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户 ...
- 对于call,apply,bind 的理解
JavaScript 中 call().apply().bind() 的用法 之前对与JavaScript中的call,apply,bind这几个方法一直理解的很模糊,今天总结一下. 例1 var n ...
- 调用SM30数据表维护的函数
相关文章:http://www.cnblogs.com/caizjian/p/3248499.html 1.se11进去新建一个数据表 2.se55进去生产表维护 3.sm30进去维护数据表 4.se ...
- 详解Document.Cookie
转自:https://www.jb51.net/article/77009.htm 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时 ...
- Django 路由层与视图层
1.路由层 1.1无名分组 1.2 有名分组 1.3 反向解析 1.4 路由分发 1.5 名称空间 2.伪静态网页 3.虚拟环境 4.视图层 1.1 JsonResponse 1.2 FBV与CBV ...