hdu 2sat题集

hdu 3602

  1 /*Author :usedrose  */
  2 /*Created Time :2015/6/2 11:26:32*/
  3 /*File Name :2.cpp*/
  4 #include <cstdio>
  5 #include <iostream>
  6 #include <algorithm>
  7 #include <sstream>
  8 #include <cstdlib>
  9 #include <cstring>
 10 #include <climits>
 11 #include <vector>
 12 #include <string>
 13 #include <ctime>
 14 #include <cmath>
 15 #include <deque>
 16 #include <queue>
 17 #include <stack>
 18 #include <set>
 19 #include <map>
 20 #define INF 0x3f3f3f3f
 21 #define eps 1e-8
 22 #define pi acos(-1.0)
 23 #define MAXN 2110
 24 #define OK cout << "ok" << endl;
 25 #define o(a) cout << #a << " = " << a << endl
 26 #define o1(a,b) cout << #a << " = " << a << "  " << #b << " = " << b << endl
 27 using namespace std;
 28 typedef long long LL;
 29
 30 int n, m;
 31 vector<int> G[2*MAXN];
 32 int instk[MAXN], dfn[MAXN], low[MAXN], scc[MAXN];
 33 int Time, cnt;
 34 stack<int> S;
 35
 36 void init()
 37 {
 38     while (!S.empty()) S.pop();
 39     Time = cnt = 0;
 40     for (int i = 0;i < n; ++ i) {
 41         G[i].clear();
 42         scc[i] = dfn[i] = low[i] = instk[i] = 0;
 43     }
 44 }
 45
 46 void Tarjan(int u)
 47 {
 48     dfn[u] = low[u] = ++Time;
 49     S.push(u);
 50     instk[u] = 1;
 51     for (int i = 0;i < G[u].size(); ++ i) {
 52         int v = G[u][i];
 53         if (!dfn[v]) {
 54             Tarjan(v);
 55             low[u] = min(low[u], low[v]);
 56         }
 57         else if (instk[v])
 58             low[u] = min(low[u], dfn[v]);
 59     }
 60     if (low[u] == dfn[u]) {
 61         cnt ++;
 62         int v;
 63         do {
 64             v = S.top();
 65             S.pop();
 66             instk[v] = 0;
 67             scc[v] = cnt;
 68         }while (v != u);
 69     }
 70 }
 71
 72
 73 void find_scc()
 74 {
 75     for (int i = 0;i < n; ++ i)
 76         if (!dfn[i])
 77             Tarjan(i);
 78 }
 79
 80 void gao()
 81 {
 82     for (int i = 0;i < n; i += 2)
 83         if (scc[i] == scc[i^1]) {
 84             puts("NO");
 85             return;
 86         }
 87     puts("YES");
 88     return;
 89 }
 90
 91 int main()
 92 {
 93     //freopen("data.in","r",stdin);
 94     //freopen("data.out","w",stdout);
 95     cin.tie(0);
 96     ios::sync_with_stdio(false);
 97     int a1, a2, c1, c2;
 98     while (cin >> n) {
 99         n*= 2;
100         init();
101         cin >> m;
102         for (int i = 0;i < m; ++ i) {
103             cin >> a1 >> a2 >> c1 >> c2;
104             G[2*a1+c1].push_back(2*a2 + 1 - c2);
105             G[2*a2+c2].push_back(2*a1 + 1 - c1);
106         }
107         find_scc();
108         gao();
109     }
110        return 0;
111 }

时间: 2024-12-15 11:20:30

hdu 2sat题集的相关文章

Hdu匹配题集

普通匹配,多重匹配[HDU]1068Girls and Boys 最大匹配★1150Machine Schedule 最小点覆盖★1151Air Raid 最小路径覆盖★1179Ollivanders 最大匹配★1281棋盘游戏 行列匹配+求关键点★★149850 years, 50 colors 行列匹配★1507Uncle Tom's Inherited Land* 黑白染色+奇偶匹配(1X2的矩形覆盖)★1528Card Game Cheater 最大匹配★1845Jimmy’s Assi

转载:hdu 动态规划题集

1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955     背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);    正确的方程是:f[j]=max(f[j],f[j-q[i].money]*q[i

杭电dp题集,附链接

Robberies 点击打开链接 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱  最脑残的是把总的概率以为是抢N家银行的概率之和- 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋); 正确的方程是:f[j]=max(f[j],f[j-q[i].money]*q[i].v)  其中,f[j]表示抢j块大洋的最大的逃脱概率,条件是f[j-q[i].money]可达,也就是

hdu 4891---水题 但是WA了很多次

这道题的坑在----过程中即使使用long  long 也会超出范围 自己看了很久读了很多遍题还是没想到 记得当时的想法是----反正我用了long long 已经是最大的范围了,肯定没法用更大的类型--即使unsigned也只是 比long long 大一倍,现在回头看,这种想法太唯心,不是理性分析的结果啊,, 代码: //1005 #include <cstdio> #include <cstring> #include <algorithm> #include &

node学习错题集

1.请求路径/favicon.ico 问题:node http.createServer()创建服务器,用户请求一次,但是服务器显示两次请求:一次为用户请求,一次请求路径为/favicon.ico ?? 代码如下: var http = require('http'); http.createServer(function(req,res){ console.log( req.url ); }).listen(8080);console.log("The server is on ...&quo

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第6章 树和二叉树 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       相关测试数据下载  链接? 数据包       本习题文档的存放目录:数据结构\▼配套习题解析\▼06 树和二叉树  

全国各大 oj 分类题集...

各种题集从易到难刷到手软  你准备好了吗? 准备剁手吧

数组和广义表-第5章-《数据结构题集》答案解析-严蔚敏吴伟民版

习题集解析部分 第5章 数组和广义表 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       本习题文档的存放目录:数据结构\▼配套习题解析\▼05 数组和广义表       文档中源码的存放目录:数据结构\▼配

编程题集

编程题集 ps: 如题目有错请及时反馈 2015/7/10    scanf.printf的基本用法.变量的定义和使用.C语言的各种运算符 ------------------------------------------------------------------------------------- 程序篇: #1编写一个程序,输出 "Hello World" . #2编写一个程序,实现简单的加减乘除运算. #3让用户输入两个整数,然后调换位置后输出. #4输入年,月,日,把