http://poj.org/problem?id=3207

题意:一个圆上顺时针依次排列着标号为1~n的点,这些点之间共有m条边相连,每两个点只能在圆内或者圆外连边。问是否存在这些边不相交的方案。(n<=1000, m<=500)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
#define zero(x) ((x)<<1)
#define one(x) (zero(x)|1)
const int N=1005;
struct E { int next, to; }e[(N*N)<<2];
int ihead[N], cnt, tot, num, FF[N], LL[N], vis[N], s[N], top, p[N], X[N], Y[N], n, m;
void add(int x, int y) { e[++cnt]=(E){ihead[x], y}; ihead[x]=cnt; }
void tarjan(int x) {
FF[x]=LL[x]=++tot; s[++top]=x; vis[x]=1;
for(int i=ihead[x]; i; i=e[i].next) {
if(!FF[e[i].to]) tarjan(e[i].to), LL[x]=min(LL[x], LL[e[i].to]);
else if(vis[x]) LL[x]=min(LL[x], FF[e[i].to]);
}
if(FF[x]==LL[x]) {
int y;
++num;
do {
y=s[top--];
vis[y]=0;
p[y]=num;
} while(x!=y);
}
}
bool work() {
int mm=m<<1;
for(int i=0; i<mm; ++i) if(!FF[i]) tarjan(i);
for(int i=0; i<mm; i+=2) if(p[i]==p[i+1]) return false;
return true;
}
void clr() {
int mm=m<<1;
memset(ihead, 0, sizeof(int)*(mm));
memset(FF, 0, sizeof(int)*(mm));
memset(p, 0, sizeof(int)*(mm));
cnt=tot=top=num=0;
}
int main() {
while(~scanf("%d%d", &n, &m)) {
for(int i=0; i<m; ++i) { scanf("%d%d", &X[i], &Y[i]); if(X[i]>Y[i]) swap(X[i], Y[i]); }
for(int i=0; i<m; ++i) {
int a=X[i], b=Y[i];
for(int j=0; j<m; ++j) if(i!=j) {
int c=X[j], d=Y[j];
if((a<c && c<b && (a>d || d>b)) || (a<d && d<b && (a>c || c>b)))
add(zero(i), one(j)), add(one(i), zero(j));
}
}
if(!work()) puts("the evil panda is lying again");
else puts("panda is telling the truth...");
clr();
}
return 0;
}

  

容易发现一条边连圆内那么在圆内的其它边与这条边有交的那么我们就连x->y'。如果一条边连在圆外那么圆外的其他边有交的我们就连x'->y。

那么搞搞就行辣= =

(现在写tarjan缩点辣~具体算法看论文 伍昱:《由对称性解2-SAT问题》

【POJ】3207 Ikki's Story IV - Panda's Trick的更多相关文章

  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. 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 ...

  3. 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   ...

  4. POJ 3207 Ikki's Story IV - Panda's Trick (2-sat)

    Ikki's Story IV - Panda's Trick Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 6691   ...

  5. poj 3207 Ikki's Story IV - Panda's Trick【2-SAT+tarjan】

    注意到相交的点对一定要一里一外,这样就变成了2-SAT模型 然后我建边的时候石乐志,实际上不需要考虑这个点对的边是正着连还是反着连,因为不管怎么连,能相交的总会相交,所以直接判相交即可 然后tarja ...

  6. POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT,基础)

    题意: 有一个环,环上n个点,现在在m个点对之间连一条线,线可以往圆外面绕,也可以往里面绕,问是否必定会相交? 思路: 根据所给的m条边可知,假设给的是a-b,那么a-b要么得绕环外,要么只能在环内, ...

  7. POJ 3207 Ikki's Story IV - Panda's Trick 2-sat模板题

    题意: 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.给你的信息中,每个点最多只会连接的一条边.问能不能连接这m条边,使这 ...

  8. 【POJ3207】Ikki's Story IV - Panda's Trick

    POJ 3207 Ikki's Story IV - Panda's Trick liympanda, one of Ikki's friend, likes playing games with I ...

  9. POJ3207 Ikki's Story IV - Panda's Trick 【2-sat】

    题目 liympanda, one of Ikki's friend, likes playing games with Ikki. Today after minesweeping with Ikk ...

随机推荐

  1. Java获取当前时间年月日、时间格式化打印、字符串转日期

    package com.sysc.simple; import java.text.ParseException; import java.text.SimpleDateFormat; import ...

  2. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  3. visual studio2010复制粘贴源代码到Word时乱码问题 分类: C# 2014-11-28 09:25 687人阅读 评论(0) 收藏

    问题描述: visual studio2010 拷贝源代码的时候,在windows自带的写字板和word2010上,粘贴的时候中文字符都会变成乱码. 如: "该用户已经被成功添加" ...

  4. wp8 入门到精通 仿QQPivot 提示数量

    <Grid x:Name="LayoutRoot" Background="White"> <Grid Width="480&quo ...

  5. Iphone [Tab Bar实现多view切换,Picker,DataPicter实现

    用Tab Bar Controller处理IPhone多个view切换, 而且还附有创建空项目,picker和DataPicker的实现! 具体步骤: 1.创建一个空项目,选择User Interfa ...

  6. 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个中两个属性值的比较验证 具体应用场景为:要对两个属性值的大小进行验证 代码如下所示: /// ...

  7. 类模板Queue的实现

    #include <iostream> #include <vector> using namespace std; template <class Type> c ...

  8. LoadRunner参数化之数据生成方式

    一般需要使用多条数据来完成实际事务的时候,需要参数化.而使用参数化可以方便实现很多实际事务,记得在哪里看到过,参数化是比C函数更高级的函数. 参数化的方法 先来个最常见的LR示例的登录脚本: Acti ...

  9. ThinkPHP3.2 volist嵌套循环显示原理

    php页面:$fatherList = $Document->where('pid=1')->select();        foreach($fatherList as $n=> ...

  10. Linux常用工具之XFTP、Xshell配置

    Xftp是一个基于 MS windows 平台的功能强大的SFTP.FTP文件传输软件.使用了 Xftp 以后,MS windows 用户能安全地在UNIX/Linux 和 Windows PC 之间 ...