POJ 3678 Katu Puzzle 2-SAT 强连通分量 tarjan
http://poj.org/problem?id=3678
给m条连接两个点的边,每条边有一个权值0或1,有一个运算方式and、or或xor,要求和这条边相连的两个点经过边上的运算后的结果是边的权值。问存不存在使所有边都符合条件的给点赋值的方法。
2-SAT的各种连法都有了。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=;
int n,m;char s[]={};
struct nod{
int y,next;
}e[maxn*maxn];
int head[maxn]={},tot=;
inline void init(int x,int y){e[++tot].y=y;e[tot].next=head[x];head[x]=tot;}
int low[maxn]={},vis[maxn]={},dfn[maxn]={},cnt=;
int sta[maxn]={},tai=,bel[maxn]={},tn=;
void tarjan(int x){
low[x]=dfn[x]=++cnt;vis[x]=;sta[++tai]=x;
for(int i=head[x];i;i=e[i].next){
int y=e[i].y;
if(!dfn[y]){
tarjan(y);if(low[x]>low[y])low[x]=low[y];
}
else if(vis[y]&&dfn[y]<low[x])low[x]=dfn[y];
}
if(low[x]==dfn[x]){
int w;++tn;
do{
w=sta[tai--];
vis[w]=;bel[w]=tn;
}while(w!=x);
}
}
int main(){
scanf("%d%d",&n,&m);int x,y,v;
for(int i=;i<=m;i++){//x+n 1 x 0
scanf("%d%d%d",&x,&y,&v);scanf("%s",s);++x;++y;
if(s[]=='A'){
if(v==){
init(x+n,y+n);init(y+n,x+n);
init(y,x+n);init(x,y+n);
}else {init(x+n,y);init(y+n,x);}
}
else if(s[]=='O'){
if(v==){init(x,y+n);init(y,x+n);}
else{
init(x,y);init(y,x);
init(x+n,y);init(y+n,x);
}
}
else{
if(v==){
init(x,y+n);init(y+n,x);
init(x+n,y);init(y,x+n);
}
else{
init(x+n,y+n);init(y+n,x+n);
init(x,y);init(y,x);
}
}
}
for(int i=;i<=*n;i++)if(!dfn[i])tarjan(i);
int f=;
for(int i=;i<=n;i++){
if(bel[i]==bel[i+n]){
f=;break;
}
}
if(f)printf("NO\n");
else printf("YES\n");
return ;
}
POJ 3678 Katu Puzzle 2-SAT 强连通分量 tarjan的更多相关文章
- poj 3678 Katu Puzzle(Two Sat)
题目链接:http://poj.org/problem?id=3678 代码: #include<cstdio> #include<cstring> #include<i ...
- 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 ...
- POJ 3678 Katu Puzzle (经典2-Sat)
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6553 Accepted: 2401 Descr ...
- poj 3678 Katu Puzzle(2-sat)
Description Katu Puzzle ≤ c ≤ ). One Katu ≤ Xi ≤ ) such that for each edge e(a, b) labeled by op and ...
- POJ 3678 Katu Puzzle(2-SAT,合取范式大集合)
Katu Puzzle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9987 Accepted: 3741 Descr ...
- POJ 3678 Katu Puzzle (2-SAT)
Katu Puzzle Time Limit: 1000MS ...
- poj 3678 Katu Puzzle 2-SAT 建图入门
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- POJ 1236 Network of Schools(强连通分量/Tarjan缩点)
传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...
- POJ 3678 Katu Puzzle(强连通 法)
题目链接 题意:给出a, b, c 和操作类型 (与或异或),问是否满足所有的式子 主要是建图: 对于 and , c == 1: 说明 a 和 b都是1,那么 0 就不能取, a' -> a ...
随机推荐
- 在JS数组指定位置插入元素
很多与数组有关的任务听起来很简单,但实际情况并不总是如此,而开发人员在很多时候也用不到他.最近我碰到了这样一个需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. ...
- dropload的使用记录
这次做一个H5的页面,需要用到上拉加载,下拉刷新的功能,在网上看到ximen写的dropload.js可以满足需求(此处致谢作者),但是用的时候还是踩了一些坑,这里记录下来备忘. 一些小问题:1. m ...
- Mysql Limit操作
oracle : || mysql: contact contact_ws 拼接 Font Size: Large | Medium | Small select * from tabl ...
- XML文件解析-SaxReader
一.前言 java解析xml文件有几种方式,这里介绍一下用SaxReader来解析Xml的方法. 二.准备 如果用SaxReader的话,需要引入jar包dom4j, 版本的话官网下载一个就好,这里用 ...
- JavaWeb--中文乱码小结
JavaWeb--中文乱码小结 出处:http://chriszz.sinaapp.com0.纯粹html乱码: 换个editor吧(有时候notepad都比sublime_text好用),最好是在& ...
- SSIS 学习之旅 序章 和 简介
SSIS 学习之旅目录: 第一章: SSIS 学习之旅 第一个SSIS 示例(一) 第二章: SSIS 学习之旅 第一个SSIS 示例(二) 第三章: SSIS 学习之旅 数据同步 第四章: SSIS ...
- 配置JDK-Java运行环境
1.将Java安装包上传到服务器某目录,如E:\jdk-7u45-windows-x64.exe 2.上传后运行jdk-7u45-windows-x64.exe 3.点击[下一步],后选择[更改],改 ...
- 提高eclipse使用效率(一)--使用快捷键
编辑代码常用快捷键 格式化代码的快捷键 Ctrl + Shift + F 格式化缩进的快捷键是 Ctrl + I,只能对选中的文本进行缩进 删除一行的快捷键是 Ctrl + D 当前窗口最大化最小化切 ...
- MySQL5.6 Waiting for Commit Lock
mysql Bug#19843808 自动修复记录 MySQL5.6和Xtrabackup之间存在一个bug,这个bug在5.6.23中已经修复. Xtrabackup备份的时候执行flushs t ...
- codeforces 286 E. Ladies' Shop (FFT)
E. Ladies' Shop time limit per test 8 seconds memory limit per test 256 megabytes input standard inp ...