题目大意:圆盘上顺次安放0, 1, 2, …, n – 1的点,每次给出两个点需要连边,可以选择在圆盘的正面连边或在圆盘的反面连边,问是否存在一种方案使得所有连线不相交?

思路:本问题可以等价成:圆盘上原本有N条线,每条线在正反面都有画上,将在正反面的两条线只保留一根,问是否存在一种方案使得所有连线不相交?

这样问题就成了赤果果的2-SAT问题了,注意到两条线如果都在正面会相交,那么都在反面也会相交,因此构图时应是无向图,按照2-SAT的形式构完图后,用TARJAN求缩点,由于在一个SCC中的点都是必定同时存在的,所以当一个线的正面和反面所代表的点在一个SCC中时,即可判定不存在这样的连线方法,充分性的证明略

#include<iostream>

#include<cstdio>

#include <math.h>

#define maxn 90000

#define min(x,y) ((x)<(y)?(x):(y))

inta[maxn],b[maxn],head[maxn],point[maxn],next[maxn],dfn[maxn],stack[maxn],now=0;

bool instack[maxn];

intcount=0,num=1,belong[maxn],low[maxn],top=0;

void insert(int x,int y)

{

next[++now]=head[x];

head[x]=now;

point[now]=y;

}

void tarjan(int k)

{

int u;

instack[k]=true;

stack[++top]=k;

dfn[k]=low[k]=++num;

for(int i=head[k];i!=0;i=next[i])

{

u=point[i];

if (dfn[u]==0)

{

tarjan(u);

low[k]=min(low[k],low[u]);

}

else if (instack[u])low[k]=min(low[k],dfn[u]);

}

if (low[k]==dfn[k])

{

++count;

do

{

u=stack[top--];

instack[u]=false;

belong[u]=count;

}while(u!=k);

}

}

int main()

{

int n,m,temp,flag=0;

scanf("%d%d",&n,&m);

for(int i=1;i<=m;i++)

{

scanf("%d%d",&a[i],&b[i]);

if (a[i]>b[i]){temp=a[i];a[i]=b[i];b[i]=temp;}

}

for (int i=1;i<=m-1;i++)//build graph

{

for(int j=i+1;j<=m;j++)

{

if ((a[i]<a[j] && b[j]>b[i]&&a[j]<b[i])||(a[i]>a[j] && b[j]<b[i]&&a[i]<b[j]))

{

insert(i*2,j*2+1);insert(j*2+1,i*2);

insert(i*2+1,j*2);insert(j*2,i*2+1);

}

}

}

for (int i=1;i<=2*m;i++)if (dfn[i]==0)tarjan(i);

for(int i=1;i<=m;i++)if (belong[i*2]==belong[i*2+1]){flag=1;break;}

if (flag==0)printf("panda is telling the truth...\n");

else printf("the evil panda is lying again\n");

return 0;

}

poj3207:Ikki's Story IV-Panda's Trick【2-sat tarjan】的更多相关文章

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

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

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

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

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

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

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

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

  8. POJ3207 Ikki's Story IV – Panda's Trick

    Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9426   Accepted: 3465 Description liym ...

  9. POJ-3207 Ikki's Story IV - Panda's Trick 2sat

    题目链接:http://poj.org/problem?id=3207 题意:在一个圆圈上有n个点,现在用线把点两两连接起来,线只能在圈外或者圈内,现给出m个限制,第 i 个点和第 j 个点必须链接在 ...

  10. poj3207 Ikki's Story IV - Panda's Trick 2-SAT

    题目传送门 题意:在一个圆上顺时针安放着n个点,给出m条线段连接端点,要求线段不相交,线段可以在圆内也可以在圆外,问是否可以. 思路:假设一条线段,放在圆外是A,放在园内是A',那么两条线段如果必须一 ...

随机推荐

  1. AJPFX:实现递归统计文件夹的总大小

    class Statistical {    public static void main(String[] args) {        Scanner sc = new Scanner(Syst ...

  2. PKU_campus_2018_A Wife

    思路: 题目链接http://poj.openjudge.cn/practice/C18A/ 先说一个结论,每一天要么7要么0,由此提供一种状态压缩dp的解法. 实现: #include <bi ...

  3. Arduino Ethernet W5100扩展板的指示灯含义

    Arduino Ethernet W5100扩展板是继承WIZnet W5100网络芯片的扩展板.将扩展板连接到Arduino后,可使Arduino具有网络功能.此扩展板上有多个指示灯,由于轻易查不到 ...

  4. 【HEVC简介】High Level Syntax

    参考文献:见<High Efficiency Video Coding (HEVC)>High Level Syntax章节 <HEVC标准介绍.HEVC帧间预测论文笔记>系列 ...

  5. Idea maven项目不能新建package和class的解决方法

    如下图,用IDEA新建的maven项目不能新建package,class等 原因是:这里的java文件夹是普通文件夹,要设置为Sources Root.(如下图) 就可以了(见下图)

  6. (转)编码剖析@Resource注解的实现原理

    http://blog.csdn.net/yerenyuan_pku/article/details/52860046 上文我们已经学会使用@Resource注解注入属性.学是学会了,但也仅限于会使用 ...

  7. 数组排序 sort

    数组排序 this.dataShow = this.data.sort((a, b) => { return parseInt(a[this.innerOrderBy]) - parseInt( ...

  8. html upload_file 对象(2018/02/26)工作收获

    php.ini中可以设置上传文件的大小,如果超过设置大小,上传失败.$_File 数组当中接受到的文件对象size为0

  9. No-8.其他命令

    其他命令 目标 查找文件 find 软链接 ln 打包和压缩 tar 软件安装 apt-get 01. 查找文件 find 命令功能非常强大,通常用来在 特定的目录下 搜索 符合条件的文件 序号 命令 ...

  10. 配置maven报错 the java_home environment variable is not defined correctly ......

    the java_home environment variable is not defined correctly This environment variable is needed to r ...