[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
Description liympanda, one of Ikki’s friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many times, he is tired of such easy games and wants to play another game with Ikki. liympanda has a magic circle and he puts it on a plane, there are n points on its boundary in circular border: 0, 1, 2, …, n − 1. Evil panda claims that he is connecting m pairs of points. To connect two points, liympanda either places Despaired at the minesweeping game just played, Ikki is totally at a loss, so he decides to write a program to help him. Input The input contains exactly one test case. In the test case there will be a line consisting of of two integers: n and m (n ≤ 1,000, m ≤ 500). The following m lines each contain two integers ai and bi, which denote Output Output a line, either “ Sample Input 4 2 Sample Output panda is telling the truth... Source
POJ Monthly--2007.03.04, Ikki
|
[Submit] [Go Back] [Status] problem_id=3207" style="text-decoration:none">Discuss
[
题目意思:
n个点。标号为0~n-1,顺序摆在一个圆盘的边缘上,如今给出m条边,每条边连接两个点。能够在圆盘里面或外面。推断这些边是否交叉。
解题思路:
2-SAT
把边抽象成点,假设内部连成的边抽象为i。则相应的边在外部则为i',推断随意两条边是否冲突。假设冲突的话。仅仅能一个放在外面。一个放在里面。
i和j冲突,则建图i'->j j->i' i->j' j'->i
代码:
//#include<CSpreadSheet.h> #include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#include<cmath>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#define M 1000000007
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 1100
int n,m;
vector<vector<int> >myv;
int low[Maxn],dfn[Maxn],sta[Maxn],bc,sc,dep;
int in[Maxn];
bool iss[Maxn]; int x[Maxn],y[Maxn];
bool iscan(int a,int b)
{
if(x[a]<x[b]&&(y[a]>x[b]&&y[a]<y[b]))
return true;
if(x[a]>x[b]&&x[a]<y[b]&&y[a]>y[b])
return true;
return false;
}
void tarjan(int cur)
{
int ne; low[cur]=dfn[cur]=++dep;
sta[++sc]=cur;
iss[cur]=true; for(int i=0;i<myv[cur].size();i++)
{
ne=myv[cur][i];
if(!dfn[ne])
{
tarjan(ne);
low[cur]=min(low[cur],low[ne]);
}
else if(iss[ne]&&dfn[ne]<low[cur])
low[cur]=dfn[ne];
}
if(low[cur]==dfn[cur])
{
++bc;
do
{
ne=sta[sc--];
in[ne]=bc;
iss[ne]=false;
}while(ne!=cur);
}
} void solve()
{
low[1]=dfn[1]=bc=sc=dep=0;
memset(iss,false,sizeof(iss));
memset(dfn,0,sizeof(dfn));
for(int i=1;i<=2*m;i++)
if(!dfn[i])
tarjan(i);
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&y[i]);
if(x[i]>y[i])
swap(x[i],y[i]);
}
myv.clear();
myv.resize(m*2+10);
for(int i=1;i<=m;i++)
{
for(int j=i+1;j<=m;j++)
{
if(iscan(i,j))
{
myv[2*i].push_back(2*j-1);
myv[2*j-1].push_back(2*i);
myv[2*i-1].push_back(2*j);
myv[2*j].push_back(2*i-1);
}
}
}
solve(); bool ans=true; for(int i=1;i<=m;i++)
{
if(in[2*i]==in[2*i-1])
{
ans=false;
break;
}
}
if(ans)
printf("panda is telling the truth...\n");
else
printf("the evil panda is lying again\n"); }
return 0;
}
[2-SAT] poj 3207 Ikki's Story IV - Panda's Trick的更多相关文章
- 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=""& ...
- POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT)
职务地址:id=3207">POJ 3207 找好矛盾关系.矛盾关系是(2,5)和(3,6)这两个仅仅能一个在外边,一个在里边.利用这个矛盾关系来建图. 能够用在外边和里边来当1和0, ...
- Ikki's Story IV - Panda's Trick (poj 3207 2-SAT)
Language: Default Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072K Total S ...
- 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 (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
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,基础)
题意: 有一个环,环上n个点,现在在m个点对之间连一条线,线可以往圆外面绕,也可以往里面绕,问是否必定会相交? 思路: 根据所给的m条边可知,假设给的是a-b,那么a-b要么得绕环外,要么只能在环内, ...
- poj 3207 Ikki's Story IV - Panda's Trick【2-SAT+tarjan】
注意到相交的点对一定要一里一外,这样就变成了2-SAT模型 然后我建边的时候石乐志,实际上不需要考虑这个点对的边是正着连还是反着连,因为不管怎么连,能相交的总会相交,所以直接判相交即可 然后tarja ...
随机推荐
- Netty引导流程解读
Channel的生命周期状态[状态转换将变为相应的事件,转发给ChannelPipeline中的ChannelHandler进行处理] ChannelUnregistered:Channel已经被创建 ...
- 前端布局神器 display:flex
前端布局神器display:flex 一直使用flex布局,屡试不爽,但是总是记不住一些属性,这里写来记录一下. 2009年,W3C提出了一种新的方案--Flex布局,可以简便.完整.响应式地实现 ...
- Spring + Redis ( 简单使用)
1.Redis 的 Java API Java 中 使用 Redis 工具,要先去 maven 仓库中,下载 jedis jar包 jedis 依赖 <dependency> <gr ...
- 表单校验插件(bootstrap-validator)
表单校验插件(bootstrap-validator) 参考文档 http://blog.csdn.net/nazhidao/article/details/51542508 http://blog. ...
- SAP computer之program counter
Program counter The program is stored in memory with the first instruction at binary address 0000, t ...
- APICloud上啦加载下拉刷新模块
apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...
- matlab学习下拉菜单Pop-Up Menu的基本用法
创建下拉菜单,修改string的属性,tag改为kj1,value值如果是1就显示第一行的sin(x),是几就显示第几行 %可以更改value值var=get(handles.kj1,'value') ...
- Firebug全了解
Firebug是firefox下的一个扩展,能够调试所有网站语言,如Html,Css等,但FireBug最吸引人的就是javascript调试功能,使用起来非常方便,而且在各种浏览器下都能使用(IE, ...
- 关于DataGridViewComboBoxColumn的二三事
近日开发一个基于WinForm的工具,用到了DataGridViewComboBoxColumn. 关于数据: DataGridView的数据源是代码生成的DataTable DataGridView ...
- PAT_A1154#Vertex Coloring
Source: PAT A 1154 Vertex Coloring (25 分) Description: A proper vertex coloring is a labeling of the ...