【2-SAT】【DFS】【分类讨论】Gym - 101617K - Unsatisfying
题意:给你一张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的更多相关文章
- dp+分类讨论 Gym 101128E
题目链接:http://codeforces.com/gym/101128 感觉这个人写的不错的(我只看了题目大意):http://blog.csdn.net/v5zsq/article/detail ...
- 【树链剖分】【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一样无脑,但是少 ...
- HDU 6665 Calabash and Landlord (分类讨论)
2019 杭电多校 8 1009 题目链接:HDU 6665 比赛链接:2019 Multi-University Training Contest 8 Problem Description Cal ...
- CF629E Famil Door and Roads【树上计数+分类讨论】
Online Judge:Codeforces629E,Luogu-CF629E Label:树上计数,分类讨论,换根 题目描述 给出一棵n个节点的树.有m个询问,每一个询问包含两个数a.b,我们可以 ...
- Codeforces 521E - Cycling City(点双连通分量+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
随机推荐
- placeholder样式设置
在input框中有时想将输入的字和placeholder设为不同的颜色或其它效果,这时就可以用以下代码来对placeholder进行样式设置了. ::-webkit-input-placeholder ...
- 2017ACM暑期多校联合训练 - Team 2 1006 HDU 6050 Funny Function (找规律 矩阵快速幂)
题目链接 Problem Description Function Fx,ysatisfies: For given integers N and M,calculate Fm,1 modulo 1e ...
- F - Warm up HDU - 4612 tarjan缩点 + 树的直径 + 对tajan的再次理解
题目链接:https://vjudge.net/contest/67418#problem/F 题目大意:给你一个图,让你加一条边,使得原图中的桥尽可能的小.(谢谢梁学长的帮忙) 我对重边,tarja ...
- bootstrap入门项目备份
bootstrap入门项目备份 http://files.cnblogs.com/files/wordblog/bootstrap%E5%85%A5%E9%97%A8%E9%A1%B9%E7%9B%A ...
- git常用命令速查表【转】
- SQL 变量 条件查询 插入数据
(本文只是总结网络上的教程) 在操作数据库时 SQL语句中难免会用到变量 比如 在條件值已知的情況下 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值 ...
- 字典对象的 Pythonic 用法(上篇)
字典对象在Python中作为最常用的数据结构之一,和数字.字符串.列表.元组并列为5大基本数据结构,字典中的元素通过键来存取,而非像列表一样通过偏移存取.笔者总结了字典的一些常用Pyhonic用法,这 ...
- 浅谈BeanUtils的拷贝,深度克隆
1.BeanUtil本地简单测试在项目中由于需要对某些对象进行深度拷贝然后进行持久化操作,想到了apache和spring都提供了BeanUtils的深度拷贝工具包,自己写了几个Demo做测试,定义了 ...
- csu 1598(KMP)
1598: 最长公共前缀 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 109 Solved: 92[Submit][Status][Web Boar ...
- Graves of the Internet - 互联网坟墓
Graves of the Internet - 互联网坟墓 互联网公司逝去产品列表 以此祭奠那些夕阳下的奔跑,祭奠那些逝去的青春 演示地址 点击 这里 https://myvin.github.io ...