HDU 3062 Party
来源:互联网 发布:外国人用淘宝 编辑:程序博客网 时间:2024/05/28 15:22
2-sat 入门题
《由对称性解2-SAT问题》
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <stack>using namespace std;const int N = 2010;vector<int> vec[N];int n, m, id, cnt;int dfn[N], vis[N], low[N], belong[N];stack<int> s;void init(){memset(vis,0,sizeof(vis));memset(dfn,-1,sizeof(dfn));memset(low,-1,sizeof(low));memset(belong,-1,sizeof(belong));id = cnt = 0;while(!s.empty())s.pop();for(int i = 0; i < 2*n; i++)vec[i].clear();}void tarjan(int u){dfn[u] = low[u] = id++;vis[u] = 1;int sz = vec[u].size();s.push(u);for(int i = 0; i < sz; i++){int v = vec[u][i];if(dfn[v] == -1){tarjan(v);low[u] = min(low[u], low[v]);}else if(vis[v] == 1){low[u] = min(low[u], dfn[v]);}}if(low[u] == dfn[u]){cnt++;while(!s.empty()){int temp = s.top();s.pop();vis[temp]=0; belong[temp]=cnt;if(temp == u)break;}}}int main(){int a,b,c,d;while(~scanf("%d%d", &n, &m)){init();for(int i = 0; i < m; i++){scanf("%d%d%d%d", &a, &b, &c, &d);vec[2*a+c].push_back(2*b+1-d);vec[2*b+d].push_back(2*a+1-c);}for(int i = 0; i < 2*n; i++){if(dfn[i] == -1)tarjan(i);}bool flag = true;for(int i = 0; i < n; i++){if( belong[2*i] == belong[2*i+1] ){flag=false;break;}}puts(flag?"YES":"NO");}return 0;}
0 0
- Hdu 3062 Party
- HDU 3062 Party
- HDU 3062 Party
- HDU 3062 Party 基础
- Hdu 3062 Party
- HDU 3062 Party
- HDU 3062 Party 2
- hdu 3062 party#2-sat
- HDU 3062 Party (2-SAT)
- HDU 3062 Party (2-SAT)
- 【HDU】3062 Party 2-sat
- HDU 3062 Party(2-sat)
- HDU 3062 Party (2-sat)
- HDU 3062 Party 2-SAT
- HDU 3062 Party 2-SAT
- HDU 3062 Party 2-sat
- HDU 3062 Party(2-SAT)
- HDU 3062 Party (2-SAT)
- 八大排序算法-归并排序
- [HDOJ 4550] 卡片游戏
- JavaWeb学习笔记:ServletConfig()和ServletContext()
- 哈希表查找 — 拉链法
- hdoj 1013 (没有体会到需要大数)
- HDU 3062 Party
- 使用MathJax在HTML中显示LaTeX
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- 南阳理工 贪心 12 喷水装置(二)
- Java泛型学习笔记
- UVa 10271 - Chopsticks(DP)
- 大数四则运算(高精度)
- 关于文件路径读取的几个方法
- 【80X86汇编语言学习】【字符串处理】字符串操作指令REP