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个点(分别 ...
随机推荐
- Selected SVN connector library is not available or cannot be loaded
1.错误描述 The following data will be sent: ------ STATUS ------ pluginId org.eclipse.team.sv ...
- Bootstrap强调相关的类
在Bootstrap中除了使用标签<strong>.<em>等说明正文某些字词.句子的重要性,Bootstrap还定义了一套类名,这里称其为强调类名(类似前面说的“.lead” ...
- Velocity教程 (zhuan)
http://blog.csdn.net/qq_25237663/article/details/52262532 ****************************************** ...
- java中的堆内存和栈内存
Java把内存分成两种: 一种叫做栈内存 一种叫做堆内存 栈内存 : 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变 ...
- 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)
题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否<100米即可. Java代码如下: /** * 将两个经纬度坐标转化成距离(米) * * @param 2个GPS经 ...
- PHP开发者常犯的MySQL错误
PHP开发者常犯的MySQL错误 数据库是WEB大多数应用开发的基础.如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分. PHP看起来很简单,一个初学者也可以几个小时内就 ...
- mysql:恢复mysql表结构
mysql,frm格式恢复mysql表结构,以tuser.frm格式为例 新增数据库,如下,创建数据库名为ab 打开数据库,双击打开数据库 点右键新建表结构 新增表,里面只添加一个字段 ...
- js倒计时天时分秒[转]
<script language="JavaScript"> <!-- // function getQueryString(name) { var reg =n ...
- IIS线程池与ASP.NET线程池
原文地址:http://www.cnblogs.com/dudu/p/3762672.html 1. IIS线程池 W3 Thread Pool(W3TP) 当处于内核模式的http.sys接收到来自 ...
- hdu 1075 二分搜索
还是写一下,二分搜索好了 这道题开数组比较坑... 二分,需要注意边界问题,例如:左闭右闭,左闭右开,否则查找不到or死循环 先上AC代码 #include<iostream> #incl ...