UVALive 5010 Go Deeper 2sat
二分答案,2sat判定。
- //#pragma comment(linker, "/STACK:1024000000,1024000000")
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<algorithm>
- #include<iostream>
- #include<sstream>
- #include<cmath>
- #include<climits>
- #include<string>
- #include<map>
- #include<queue>
- #include<vector>
- #include<stack>
- #include<set>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> pii;
- #define pb(a) push(a)
- #define INF 0x1f1f1f1f
- #define lson idx<<1,l,mid
- #define rson idx<<1|1,mid+1,r
- #define PI 3.1415926535898
- template<class T> T min(const T& a,const T& b,const T& c) {
- return min(min(a,b),min(a,c));
- }
- template<class T> T max(const T& a,const T& b,const T& c) {
- return max(max(a,b),max(a,c));
- }
- void debug() {
- #ifdef ONLINE_JUDGE
- #else
- freopen("in.txt","r",stdin);
- //freopen("d:\\out1.txt","w",stdout);
- #endif
- }
- int getch() {
- int ch;
- while((ch=getchar())!=EOF) {
- if(ch!=' '&&ch!='\n')return ch;
- }
- return EOF;
- }
- const int maxn=;
- struct TwoSat
- {
- int n;
- vector<int> g[maxn*];
- bool mark[maxn*];
- int s[maxn*],c;
- bool dfs(int x)
- {
- if(mark[x^])return false;
- if(mark[x])return true;
- mark[x]=true;
- s[c++]=x;
- for(int i=;i<g[x].size();i++)
- {
- if(!dfs(g[x][i]))return false;
- }
- return true;
- }
- void init(int n)
- {
- this->n=n;
- for(int i=;i<n*;i++)
- g[i].clear();
- memset(mark,,sizeof(mark));
- }
- void add_clause(int x,int xval,int y,int yval)
- {
- x=x*+xval;
- y=y*+yval;
- g[x].push_back(y^);
- g[y].push_back(x^);
- }
- bool solve()
- {
- for(int i=;i<n*;i+=)
- {
- if(!mark[i]&&!mark[i+])
- {
- c=;
- if(!dfs(i))
- {
- while(c>)mark[s[--c]]=;
- if(!dfs(i+))return false;
- }
- }
- }
- return true;
- }
- };
- TwoSat solver;
- const int maxm=;
- int a[maxm],b[maxm],c[maxm];
- int n,m;
- int check(int k)
- {
- solver.init(n);
- for(int i=;i<k;i++)
- {
- if(c[i]==)
- {
- int x=a[i],y=b[i];
- solver.add_clause(x,,y,);
- }
- if(c[i]==)
- {
- int x=a[i],y=b[i];
- solver.add_clause(x,,y,);
- }
- if(c[i]==)
- {
- int x=a[i],y=b[i];
- solver.add_clause(x,,y,);
- solver.add_clause(x,,y,);
- }
- }
- return solver.solve();
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- for(int ca=;ca<=t;ca++)
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<m;i++)
- scanf("%d%d%d",&a[i],&b[i],&c[i]);
- int l=,r=m+;
- while(l<r)
- {
- int mid=(r+l)>>;
- if(check(mid))
- l=mid+;
- else r=mid;
- }
- printf("%d\n",l-);
- }
- return ;
- }
UVALive 5010 Go Deeper 2sat的更多相关文章
- LA 5010 Go Deeper 2-SAT 二分
题意: 有\(n\)个布尔变量\(x_i\),有一个递归函数.如果满足条件\(x[a[dep]] + x[b[dep]] \neq c[dep]\),那么就再往深递归一层. 问最多能递归多少层. 分析 ...
- UVALive 3713 Astronauts (2-SAT,变形)
题意: 有A,B,C三种任务,每个人必获得1个任务,大于等于平均年龄的可以选择A和C,小于平均年龄的可以选择B和C.这些人有一些是互相讨厌的,必须不能执行同任务,问能否安排他们工作?若行,输出任意一组 ...
- zoj3422Go Deeper(2-sat + 二分)
题目请戳这里 题目大意: go(int dep, int n, int m) begin output the value of dep. if dep < m and x[a[dep]] + ...
- Go Deeper(2010成都现场赛题)(2-sat)
G - Go Deeper Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description ...
- HDU 3715 Go Deeper(2-sat)
HDU 3715 Go Deeper 题目链接 题意:依据题意那个函数,构造x数组.问最大能递归层数 思路:转化为2-sat问题,因为x仅仅能是0.1,c仅仅能是0,1.2那么问题就好办了,对于0, ...
- POJ 2296 Map Labeler / ZOJ 2493 Map Labeler / HIT 2369 Map Labeler / UVAlive 2973 Map Labeler(2-sat 二分)
POJ 2296 Map Labeler / ZOJ 2493 Map Labeler / HIT 2369 Map Labeler / UVAlive 2973 Map Labeler(2-sat ...
- UVALive - 3713 - Astronauts(图论——2-SAT)
Problem UVALive - 3713 - Astronauts Time Limit: 3000 mSec Problem Description Input The input cont ...
- UVALive - 3211 - Now or later(图论——2-SAT)
Problem UVALive - 3211 - Now or later Time Limit: 9000 mSec Problem Description Input Output Sampl ...
- 训练指南 UVALive - 3713 (2-SAT)
layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...
随机推荐
- C++11:POD数据类型
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 啥是POD类型? POD全称Plain Old Data.通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是 ...
- 另一种遍历Map的方式: Map.Entry 和 Map.entrySet()
源网址: http://blog.csdn.net/mageshuai/article/details/3523116 今天看Think in java 的GUI这一章的时候,里面的TextArea这 ...
- 在脚本中刷新impala元信息
刷新impala元信息 impala-shell -q 'invalidate metadata' -i hslave1 impala-shell -q 'select count(*) from p ...
- HDFS--(HA)初始化与启动
1.启动zk 2.启动journalnode: hadoop-daemons.sh start journalnode 3.格式化zkfc--让在zookeeper中生成ha节点 ...
- spring数据源配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-// ...
- 【转】Using Gamma 2.2
This is a detailed description of the work with Gamma 2.2. If you are only interested in exact instr ...
- [主页]大牛系列01:Microsoft Research的Johannes Kopf
时间:2015.11.21 版本:初稿 -------------------------------------------------------------------------------- ...
- Linux_03------Linux的基本命令
/** * 基本命令格式 * 命令 [选项] [参数] */ /** * 目录处理命令 * mkdir dirname 创建目录 * mkdir -p dir1/dir 递归创建目录 * cd dir ...
- PHP生成静态页
代码如下: <? function makedir($mudir) //创建目录 { $file = "./$mudir"; @mkdir($file,07 ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...