POJ 3207
还是那句话,做2SAT题时,找出矛盾点基本上可解了。这道题也是这样
题意是说给出一个圆上的 n 个点(0~n-1编号),然后在指定的 m 对点之间各连一条线(可以在圆内,也可以在圆外,可以是曲线,这点真心坑爹,开始一直木有看明白),然后问你是否能使这些线都不相交
当两条线在同一边会有交点时,即会有矛盾,建图加边。
对于那些没有交点即没有矛盾的边,直接忽略就好,因为边的含义是“必须”。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int MAXN=;
const int MAXM=;
int n,m;
struct d{
int u,v;
}sv[];
int dfn[MAXN],low[MAXN],st[MAXN],tot,stop,pat,indx,belong[MAXN];
bool stack[MAXN];
struct e{
int u,v;
int next;
}edge[MAXM];
int head[MAXN]; void addedge(int u,int v){
edge[tot].u=u;
edge[tot].v=v;
edge[tot].next=head[u];
head[u]=tot++;
} void exch(int &x,int &y){
if(x>y){
int tmp=y;
y=x;
x=tmp;
}
} bool sure(int i,int k){
int u=sv[k].u;
int v=sv[k].v;
int p=sv[i].u;
int q=sv[i].v;
if(p>=u&&p<=v&&q>=u&&q<=v)
return false;
if(p>=v) return false;
if(q<=u) return false;
if(p<=u&&q>=v) return false;
return true;
} void tarjan(int u){
dfn[u]=low[u]=++indx;
stack[u]=true;
st[stop++]=u;
int v;
for(int e=head[u];e!=-;e=edge[e].next){
v=edge[e].v;
if(dfn[v]==){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(stack[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
pat++;
do{
v=st[--stop];
belong[v]=pat;
stack[v]=false;
}while(u!=v);
}
} int main(){
int u,v;
while(scanf("%d%d",&n,&m)!=EOF){
tot=indx=pat=stop=;
for(int i=;i<m*;i++){
dfn[i]=low[i]=belong[i]=;
stack[i]=false; head[i]=-;
} for(int i=;i<m;i++){
scanf("%d%d",&sv[i].u,&sv[i].v);
exch(sv[i].u,sv[i].v);
if(i>){
for(int k=;k<i;k++){
if(sure(i,k)){
addedge(*i,*k+);
addedge(*k,*i+);
addedge(*i+,*k);
addedge(*k+,*i);
}
}
}
} for(int i=;i<*m;i++)
if(dfn[i]==)
tarjan(i); bool flag=true;
for(int i=;i<m;i++){
if(belong[i*]==belong[*i+]){
flag=false;
printf("the evil panda is lying again\n");
break;
}
}
if(flag)
printf("panda is telling the truth...\n");
}
return ;
}
POJ 3207的更多相关文章
- POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT)
职务地址:id=3207">POJ 3207 找好矛盾关系.矛盾关系是(2,5)和(3,6)这两个仅仅能一个在外边,一个在里边.利用这个矛盾关系来建图. 能够用在外边和里边来当1和0, ...
- 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 ...
- 2-SAT的小总结(POJ 3683 POJ 3207)
记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0&l ...
- 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)
http://poj.org/problem?id=3207 Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 13 ...
- [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 Time Limit: 1 ...
- POJ 3207 【2-SAT入门题 + 强连通分量】
这道题是我对于2-SAT问题的入门题:http://poj.org/problem?id=3207 一篇非常非常非常好的博客,很详细,认真看一遍差不多可以了解个大概:https://blog.csdn ...
- 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(2-SAT+SCC)
传送门:Problem 3207 https://www.cnblogs.com/violet-acmer/p/9769406.html 难点: 题意理解. 题意: 平面上有一个圆,圆上有n个点(分别 ...
- 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 ...
随机推荐
- PCB 后台自动系统集成与邮件推送实现
在PCB行业中,工程系统是主要数据生产者,而这些数据不仅仅给自己系统使用呀,我们需要将数据传递到各系统,才达到各系统共同协作的目的. 这里以问答方式对实现方式进行讲解.呵呵呵! 后台自动集成问题解答: ...
- PCB MongoDb安装与Windows服务安装
工程MI流程指示做成Web网页形式,采用MVC框架制作,数据传输用Web API方式, 最终此网页会挂到公司各系统中访问,为了提高访问并发量,并将工程数据统一结构化管理, 采用No SQL Mongo ...
- bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 758 Solved: 419[Submit ...
- go的基础数据类型
一.基础数据类型 在go语言中,数据类型用于申明函数和变量 go语言的类型 数据类型 描述 布尔型 布尔型值的只能是true 和 false ,例如 var b bool = true, 布尔型值声明 ...
- 1、Visual Studio Code安装及Hello Word
一.环境初始化 1.下载 Visual Studio Code对应版本安装 2.下载.NET Core 2.0 SDK安装 3.安装Mono Debug 完成后界面如下: 二.创建控制 ...
- windows下查看端口进程占用情况
引用:http://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html 我们在启动应用的时候经常发现我们需要使用的端口被别的程序占用,但是我 ...
- 【sqli-labs】 less24 POST- Second Order Injections *Real treat* -Stored Injections (POST型二阶注入 *真的好玩?* 存储注入)
简单登陆浏览一遍后,发现是一个登陆注册修改密码的应用 审查一下代码 登陆页面的username,password使用了转义 注册页面的参数也进行了转义处理 但是在修改password的页面,直接从se ...
- Linux 之常用操作指令详解
1. 查看当做操作目录位置 > pwd 2. 查看(当前)目录里边的文件内容 > ls //list > ls -l 或ll //显示文件的详细信息 > ls -al //al ...
- Java中类似单元格之间的计算公式解析,如A1+B3-B4
package net.riking.util; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; ...
- iterm2 快捷键设置
单词跳转 设置option+ 左右键