POJ 3207 2-sat
题目大意:
在圆上顺时针n个点,给定m个连接,可以通过圆内或者圆外相交,问能不能找到一种方式,使这些连接的边都不相交
这里很容易看出的是,这些边只有在圆外或者圆内两种连接方式,而且必须选择其中一种
所以2-sat以这些边作为连接点,向内连接为2*i,圆外连接为2*i+1
自己画画图可以找到规律
if(b[i]<a[j] || b[j]<a[i] || (a[i]<a[j]&&b[i]>b[j]) || (a[j]<a[i]&&b[j]>b[i])) ;这个时候,两条边不管在什么地方都不会影响的
其他的情况就必须保证一条在圆内一条在圆外
#include <cstdio>
#include <vector>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 2010
int S[N] , n , m , c;
bool mark[N];
vector<int> G[N]; void init()
{
memset(mark , , sizeof(mark));
for(int i= ; i<*m ; i++) G[i].clear();
} void add_clause(int i , int p , int j , int q)
{
int m=*i+p , n=*j+q;
G[m^].push_back(n);
G[n^].push_back(m);
} bool dfs(int u)
{
if(mark[u]) return true;
if(mark[u^]) return false;
mark[u] = true;
S[c++] = u;
for(int i= ; i<(int)G[u].size() ; i++)
if(!dfs(G[u][i])) return false;
return true;
} bool solve()
{
for(int i= ; i<*m ; i+=){
if(!mark[i] && !mark[i^]){
c = ;
if(!dfs(i^)){
while(c) mark[S[--c]] = false;
if(!dfs(i)) return false;
}
}
}
return true;
} int main()
{
//freopen("in.txt" , "r" , stdin);
while(~scanf("%d%d" , &n , &m))
{
init();
int a[N] , b[N];
for(int i= ; i<m ; i++){
scanf("%d%d" , &a[i] , &b[i]);
if(a[i]>b[i]) swap(a[i] , b[i]);
for(int j= ; j<i ; j++){
if(b[i]<a[j] || b[j]<a[i] || (a[i]<a[j]&&b[i]>b[j]) || (a[j]<a[i]&&b[j]>b[i])) ;
else {
// cout<<i<<" "<<j<<endl;
add_clause(i , , j , );
add_clause(i , , j , );
}
}
}
printf("%s\n" , solve()?"panda is telling the truth...":"the evil panda is lying again");
}
}
POJ 3207 2-sat的更多相关文章
- POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT)
职务地址:id=3207">POJ 3207 找好矛盾关系.矛盾关系是(2,5)和(3,6)这两个仅仅能一个在外边,一个在里边.利用这个矛盾关系来建图. 能够用在外边和里边来当1和0, ...
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat问题)
POJ 3207 Ikki's Story IV - Panda's Trick(2-sat问题) Description liympanda, one of Ikki's friend, likes ...
- 2-SAT的小总结(POJ 3683 POJ 3207)
记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0&l ...
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat)
POJ 3207 Ikki's Story IV - Panda's Trick id=3207" target="_blank" style=""& ...
- Ikki's Story IV - Panda's Trick POJ - 3207(水2 - sat 在圈内 还是 在圈外)
题意: 就是一个圈上有n个点,给出m对个点,这m对个点,每一对都有一条边,合理安排这些边在圈内或圈外,能否不相交 解析: 我手残 我手残 我手残 写一下情况 只能是一个在圈外 一个在圈内 即一个1一个 ...
- poj 3207 Ikki's Story IV - Panda's Trick (2-SAT)
http://poj.org/problem?id=3207 Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 13 ...
- [2-SAT] poj 3207 Ikki's Story IV - Panda's Trick
题目链接: id=3207">http://poj.org/problem? id=3207 Ikki's Story IV - Panda's Trick Time Limit: 1 ...
- POJ 3207 【2-SAT入门题 + 强连通分量】
这道题是我对于2-SAT问题的入门题:http://poj.org/problem?id=3207 一篇非常非常非常好的博客,很详细,认真看一遍差不多可以了解个大概:https://blog.csdn ...
- POJ 3207 Ikki's Story IV - Panda's Trick
Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7296 ...
- poj 3207(2-SAT+SCC)
传送门:Problem 3207 https://www.cnblogs.com/violet-acmer/p/9769406.html 难点: 题意理解. 题意: 平面上有一个圆,圆上有n个点(分别 ...
随机推荐
- linux 命令 第一波
man 命令名字 查看命令详细解释 q退出cd 切换目录cd .. 回到上级目录su 切换用户pwd 当前目录mkdir cmy 创建cmy文件夹[目录]rm cmy 删除cmy文件夹[如果cmy里面 ...
- mysql 命令行快速导出数据,导入数据
如果数据有20几万以上的时候,下面的方法很实用 导出数据 1.into outfile select * from table into outfile 'C:/a.sql'; 2.mysqldump ...
- Linq To Sql 语法 子查询 & In & Join
子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 =from cin ctx.Customers where ...
- maven寻找jar
http://mvnrepository.com/artifact/org.springframework/spring-context
- ionic 原生日历控件不支持,改用 datepicker-for-ionic
具体参考地址 http://npm.taobao.org/package/datepicker-for-ionic
- VB6 GDI+ 入门教程[6] 图片
http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[6] 图片 2009 年 6 月 19 日 15条评论 ...
- PC-1500收集整理记
目录 第1章计算器 1 1.1 存储卡 2 1.2 取出"牛皮糖" 4 1.3 打磨键盘按钮 6 1.4 通电 7 第2章底座 10 2.1 去 ...
- CSS学习笔记(float和盒子模型)
1.当元素或者是它的包裹层设置了绝对定位或者是浮动,那么margin:0 auto;自动居中的效果就不会实现. 2.盒子模型的三位立体结构图中从第一层到第五层依次为:border.content+pa ...
- 在腾讯云上创建您的SQL Cluster(2)
版权声明:本文由李斯达原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/248 来源:腾云阁 https://www.qclo ...
- github for windows 桌面版使用方法
首先得去下载github for windows,搜索下GitHub Desktop就可以找到,然后安装 打开软件进入主界面,选择右上角的设置按钮,会弹出下拉菜单,选择options 没一 ...