[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 ...
随机推荐
- LeetCode.884-两句话中不常见的单词(Uncommon Words from Two Sentences)
这是悦乐书的第338次更新,第362篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第207题(顺位题号是884).我们给出了两个句子A和B.(一个句子是一串空格分隔的单词 ...
- MSSQL:查看作业情况
select j.name 'Job名', j.description '描述', j.ENABLED job_enabled, cast(js.last_r ...
- TCP/IP详解(二)
首先,不得不吐槽一下中文版的翻译,把英文版的很多部分的删除了.中文版的pdf只有400多页,英文版有1000多页.迫于时间,只有先将就着看中文版,但是遇到不懂的地方,一定要对照英文版来看. 滑动窗口协 ...
- php统计网站 / html页面 浏览访问次数程序
本文章来给大这介绍了php自己写的一些常用的网站统计代码写法,用无数据库的与使用数据库及html静态页面浏览资次数统计代码,大家可进入参考. 实例1 直接使用txt文件进行统计的代码 <?php ...
- 修改Switch 的颜色
1:效果图 2:布局 <Switch android:id="@+id/switch_bg" style="@style/switchStyle" and ...
- CNN:Windows下编译使用Caffe和Caffe2
用于检测的CNN分为基于回归网络的方法和基于区域+CNN网络的方法,其中基于回归网络的方法典型为YOLO9000,可以兼容使用VGG-Net框架.其中基于区域+CNN网络方法,大量使用了Caffe作为 ...
- Dispatch Queues and Thread Safety
Dispatch Queues and Thread Safety It might seem odd to talk about thread safety in the context of di ...
- 【转】Linux rpm 命令参数使用详解[介绍和应用]
RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...
- 整理Webview加载缓慢的解决方案
1.https://www.cnblogs.com/xinye/p/3144139.html 2.https://www.jianshu.com/p/95d4d73be3d1
- Unity与Android通信的中间件
2.1.1 Fragment和Activity都需要实现的接口——IBaseView/** * Description:Basic interface of all {@link Activity} ...