题意:给你一张2-SAT,问你加至少几句a V b(不能用非运算)这样的语句,使得其无法全为真。

如果最开始没有左右两项都含非运算的析取表达式,则无解,因为显然你可以对每一项的不含非的那项规定为真,使得整个2-SAT成立。

由于规定了你添加的语句不能含有非运算,故添加的边一定从 非某 指向 某。

如果一开始就存在某个a,它和非a互相可达,则答案为0。

如果一开始某个非a能到达a,则答案为1;如果一开始存在某个非j,a能到达非j,并且存在某个i,i能到达非a,则答案也为1,显然可以添一条从非某指向某的边使得a和非a互相可达。

其余情况输出2。

#include<cstdio>
using namespace std;
int n,m,x[2005],y[2005];
bool can[2005*2][2005*2];
int first[2005*2],v[4005],nex[4005],e;
void AddEdge(int U,int V){
v[++e]=V;
nex[e]=first[U];
first[U]=e;
}
void dfs(int from,int U){
can[from][U]=1;
for(int i=first[U];i;i=nex[i]){
if(!can[from][v[i]]){
dfs(from,v[i]);
}
}
}
int main(){
//freopen("k.in","r",stdin);
bool flag=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&x[i],&y[i]);
if(x[i]<0 && y[i]<0){
flag=1;
}
}
if(!flag){
puts("-1");
return 0;
}
for(int i=1;i<=m;++i){
if(x[i]>0 && y[i]>0){
AddEdge(x[i]+n,y[i]);
AddEdge(y[i]+n,x[i]);
}
else if(x[i]>0 && y[i]<0){
AddEdge(x[i]+n,-y[i]+n);
AddEdge(-y[i],x[i]);
}
else if(x[i]<0 && y[i]>0){
AddEdge(-x[i],y[i]);
AddEdge(y[i]+n,-x[i]+n);
}
else{
AddEdge(-x[i],-y[i]+n);
AddEdge(-y[i],-x[i]+n);
}
}
for(int i=1;i<=n*2;++i){
dfs(i,i);
}
/*for(int i=1;i<=n*2;++i){
for(int j=1;j<=n*2;++j){
printf("%d ",can[i][j]);
}
puts("");
}*/
for(int i=1;i<=n;++i){
if(can[i][i+n] && can[i+n][i]){
puts("0");
return 0;
}
}
for(int i=1;i<=n;++i){
if(can[i][i+n]){
puts("1");
return 0;
}
}
for(int i=1;i<=n;++i){
if(can[n+i][i]){
bool f1=0;
for(int j=1;j<=n;++j){
if(can[i][j+n]){
f1=1;
break;
}
}
if(f1){
bool f2=0;
for(int j=1;j<=n;++j){
if(can[j][i+n]){
f2=1;
break;
}
}
if(f2){
puts("1");
return 0;
}
}
}
}
/*for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j)if(j!=i){
if(can[j][i] && can[j][i+n] && can[i][j+n] && can[i+n][j+n]){
puts("1");
return 0;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(can[i][j] && can[i][j+n]){
puts("1");
return 0;
}
}
}*/
puts("2");
return 0;
}

【2-SAT】【DFS】【分类讨论】Gym - 101617K - Unsatisfying的更多相关文章

  1. dp+分类讨论 Gym 101128E

    题目链接:http://codeforces.com/gym/101128 感觉这个人写的不错的(我只看了题目大意):http://blog.csdn.net/v5zsq/article/detail ...

  2. 【树链剖分】【dfs序】【LCA】【分类讨论】Codeforces Round #425 (Div. 2) D. Misha, Grisha and Underground

    一棵树,q次询问,每次给你三个点a b c,让你把它们选做s f t,问你把s到f +1后,询问f到t的和,然后可能的最大值是多少. 最无脑的想法是链剖线段树……但是会TLE. LCT一样无脑,但是少 ...

  3. HDU 6665 Calabash and Landlord (分类讨论)

    2019 杭电多校 8 1009 题目链接:HDU 6665 比赛链接:2019 Multi-University Training Contest 8 Problem Description Cal ...

  4. CF629E Famil Door and Roads【树上计数+分类讨论】

    Online Judge:Codeforces629E,Luogu-CF629E Label:树上计数,分类讨论,换根 题目描述 给出一棵n个节点的树.有m个询问,每一个询问包含两个数a.b,我们可以 ...

  5. Codeforces 521E - Cycling City(点双连通分量+分类讨论)

    Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...

  6. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  7. BZOJ-1067 降雨量 线段树+分类讨论

    这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...

  8. UVaLive 6862 Triples (数学+分类讨论)

    题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...

  9. 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil

    1177: [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1477  Solved: 589[Submit] Descri ...

随机推荐

  1. ES6核心,值得驻足花一天时间来学习

    1.let 和 const 命令 在es5时,只有两种变量声明,var 和function.在es6中新增了四种let和const,以及另外两种声明import和class. 我们先讲解let和con ...

  2. NYOJ 2 括号配对问题 (模拟)

    题目链接 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S ...

  3. 天梯赛 L2-006 树的遍历 (二叉树)

    给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数.第二行给出其后序遍历序 ...

  4. python-num18 - django进阶一

    一.深入django的路由系统 下面为django的请求生命周期 下面来看下整个生命周期中的路由系统: 在Django的urls中我们可以根据一个URL对应一个函数名来定义路由规则如下: " ...

  5. 前端bootstrap框架禁用响应式的方法

    在Bootstrap中极其重要的一个技术内容便是响应式布局了,一次编码针对不同设备终端的强大能力使得响应式技术愈发流行. 不过正所谓“萝卜青菜各有所爱”,如果你想要使用Bootstrap开发自己的项目 ...

  6. MacOS Safari 中 button 不能使用 text-gradient

    @mixin text-gradient ($deg: 90deg, $from: $gradientFrom, $to: $gradientEnd) { background-image: line ...

  7. Python3 re模块正则表达式中的re.S

    在Python的正则表达式中,有一个参数为re.S.它表示"."(不包含外侧双引号,下同)的作用扩展到整个字符串,包括"\n".看如下代码: import re ...

  8. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  9. ftp--vsftp\pureftpd

    FTP是File Transfer Protocol(文件传输协议),用于Internet上的控制文件的双向传输. 现今常用在一个局域网内,如学校.公司等一个指定范围的区域.(因为太过于简单和不安全) ...

  10. CentOS7 安装python库(numpy、scipy、matplotlib、scikit-learn、tensorflow)

    0.1准备工作 安装好CentOS7,配置好网络,确保网络畅通. 0.2root授权 首先:当前用户为kaid # vim /etc/sudoers 在root ALL=(ALL) ALL之后添加: ...