POJ3207Ikki's Story IV - Panda's Trick(模板题)
题意:平面上,一个圆,圆的边上按顺时针放着n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只会连接的一条边。问能不能连接这m条边,使这些边都不相交。
分析:将每一条边缩成一个点,对于每条边要么在圆内要么在园外只有满足一种情况,将在圆内设为i,在圆外设为i',那么对于两条线(i, j)不能同时在圆内,那么也不能同时在圆外。则有四种情况 (i, j') (i', j) (j, i') (j', i)要建这四条边,然后就照着刘汝佳书上的抄了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#include <stack>
#include <algorithm>
using namespace std;
const int Max = ;
struct TWOSAT
{
int n;
vector<int> G[Max * ];
bool mark[Max * ];
int S[Max * ], c;
void init(int n)
{
this->n = n;
for (int i = ; i <= n * ; i++)
G[i].clear();
memset(mark, , sizeof(mark));
}
void add_clause(int x, int y)
{
G[ * x].push_back( * y + ); //四条边
G[ * x + ].push_back( * y);
G[ * y + ].push_back( * x);
G[ * y].push_back( * x + );
}
bool dfs(int x)
{
if (mark[x ^ ])
return false;
if (mark[x])
return true;
mark[x] = true;
S[c++] = x;
for (int i = ; i < (int) G[x].size(); i++)
if (!dfs(G[x][i]))
return false;
return true;
}
bool solve()
{
for (int i = ; i <= n * ; i += )
{
if (!mark[i] && !mark[i + ])
{
c = ;
if (!dfs(i))
{
while (c > )
mark[ S[--c] ] = false;
if (!dfs(i + ))
return false;
}
}
}
return true;
}
};
struct Node
{
int s, t;
}node[Max];
int main()
{
int n, m;
while (scanf("%d%d", &n, &m) != EOF)
{
for (int i = ; i <= m; i++)
{
scanf("%d%d", &node[i].s, &node[i].t);
if (node[i].s > node[i].t) //这一步让判断相交很方便
swap(node[i].s, node[i].t);
}
TWOSAT twosat;
twosat.init(m);
for (int i = ; i <= m; i++)
{
for (int j = i + ; j <= m; j++)
{
if ( (node[i].s < node[j].s && node[i].t < node[j].t && node[i].t > node[j].s) || (node[j].s < node[i].s && node[i].t > node[j].t && node[j].t > node[i].s) ) //相交的情况, i 的起点 在 j 的 起点和终点之间并且i的终点要大于j的终点, 另一种情况类似
{
twosat.add_clause(i, j);
}
}
}
if (twosat.solve())
printf("panda is telling the truth...\n");
else
printf("the evil panda is lying again\n");
}
}
POJ3207Ikki's Story IV - Panda's Trick(模板题)的更多相关文章
- poj--3207--Ikki's Story IV - Panda's Trick(2-sat)
		
Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072KB 64bit IO Format: %I64d ...
 - 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)
		
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 ...
 - 【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 ...
 - 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条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.给你的信息中,每个点最多只会连接的一条边.问能不能连接这m条边,使这 ...
 - poj3207     Ikki's Story IV - Panda's Trick      2-SAT
		
题目传送门 题意:在一个圆上顺时针安放着n个点,给出m条线段连接端点,要求线段不相交,线段可以在圆内也可以在圆外,问是否可以. 思路:假设一条线段,放在圆外是A,放在园内是A',那么两条线段如果必须一 ...
 - 【POJ】3207 Ikki's Story IV - Panda's Trick
		
http://poj.org/problem?id=3207 题意:一个圆上顺时针依次排列着标号为1-n的点,这些点之间共有m条边相连,每两个点只能在圆内或者圆外连边.问是否存在这些边不相交的方案.( ...
 
随机推荐
- 知乎UWP 预览
			
又是很久都没有写博客了,为了表达歉意,奉上一个新的App,O(∩_∩)O! 因为商店的知乎太多了,然而,,所以一直打算自己动手写一个. 近段时间有些假期加上课程不是很忙,抽时间写了这个知乎.商店链接 ...
 - .NET平台下的微信SDK(Rabbit.WeiXin)开源发布
			
在上一篇文章<RabbitHub开源情况及计划>上有提及到了一个新的开源项目——微信SDK,经过几天的努力现在开源发布Beta1版本. 目录 前言 特点 功能 支持的消息类型 请求消息 事 ...
 - DateTime.Now.ToString() 用法
			
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
 - java 环境配置
			
'JAVAC' 不是内部或外部命令解决方法 'JAVAC' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 'JAVA' 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法相似. ...
 - 17-tail 简明笔记
			
显示文件的最后一部分(尾部) tail [options] [file-list] 参数 file-list是tail要显示的文件的路径名列表.当制定多个文件时,tail在显示每个文件的内容之前先显示 ...
 - 修改placehosder
			
CSS美化INPUT placeholder效果.CSS代码美化文本框里的placeholder文字. ::selection伪元素 简而言之:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3 ...
 - hadoop fs -mkdir testdata错误 提示No such file or directory
			
解决方法: hadoop fs -mkdir -p testdata
 - [转]JAVA设计模式之单例模式
			
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主 ...
 - jsp内置对象作业1-用户登录
			
题目:编写一个jsp程序,实现用户登录,当用户输入的用户名或密码错误时,将页面重定向到错误提示也,并在该页面显示30秒后,自动返回到用户登录页面. 1.用户登录页面 <%@ page langu ...
 - css 选择器样式优先级
			
!important > 行内 >id > class >tag >*