【POJ】3207 Ikki's Story IV - Panda's Trick
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的更多相关文章
- 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 ...
- 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 ...
- 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 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 ...
- poj 3207 Ikki's Story IV - Panda's Trick【2-SAT+tarjan】
注意到相交的点对一定要一里一外,这样就变成了2-SAT模型 然后我建边的时候石乐志,实际上不需要考虑这个点对的边是正着连还是反着连,因为不管怎么连,能相交的总会相交,所以直接判相交即可 然后tarja ...
- POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT,基础)
题意: 有一个环,环上n个点,现在在m个点对之间连一条线,线可以往圆外面绕,也可以往里面绕,问是否必定会相交? 思路: 根据所给的m条边可知,假设给的是a-b,那么a-b要么得绕环外,要么只能在环内, ...
- POJ 3207 Ikki's Story IV - Panda's Trick 2-sat模板题
题意: 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.给你的信息中,每个点最多只会连接的一条边.问能不能连接这m条边,使这 ...
- 【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 ...
- 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 ...
随机推荐
- How many Fibs?【sudt 2321】【大数的加法及其比较】
How many Fibs? Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Recall the definition of t ...
- tomcat安装服务和内存参数设置
第一:安装服务 在dos窗口进入到tomcat的bin目录下,通过如下命令即可将tomcat安装成服务 service.bat install Tomcat2 其中Tomcat2是服务的名称 如果启动 ...
- 搜索引擎爬虫技术研究(爬虫框架)-WebCollector
一.简介: https://github.com/CrawlScript/WebCollector/blob/master/README.zh-cn.md 二.使用: <dependency&g ...
- Python 入门简介(一)
Why Python? 我个人认为去学习一门新的语言其实是不需要理由的,当然如果你硬要我编个理由的话还是很容易的. 容易学 容易用 有人真的在用Python么? 这个问题谁用谁知道. 选择什么开发工具 ...
- go-martini 简单分析之二
martini.go 对路由采用正则表达式处理,最终转化成正则表达式. 添加route对应的调用栈 按照生成,验证,添加的步骤 route := newRoute(method, pattern, h ...
- python调用系统命令popen、system
python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.所以说一般我们认为popen ...
- 自己动手写RTP服务器——关于RTP协议
转自:http://blog.csdn.net/baby313/article/details/7353605 本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及 ...
- 上四条只是我目前总结菜鸟们在学习FPGA时所最容易跑偏的地
长期以来很多新入群的菜鸟们总 是在重复的问一些非常简单但是又让新手困惑不解的问题.作为管理员经常要给这些菜鸟们普及基础知识,但是非常不幸的是很多菜鸟怀着一种浮躁的心态来学习 FPGA,总是急于求成. ...
- CoreLocation 下的定位跟踪测速
#import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...
- connot resolve symbol R
出现这个原因大都是layout里的xml文件出错,就不会自动生成R文件