POJ 3207 Ikki's Story IV - Panda's Trick(2-sat判解存在性)
来源:互联网 发布:知乎产品分析 编辑:程序博客网 时间:2024/05/17 06:00
题意:平面上,一个圆,圆的边上按顺时针放着n个点。现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接。给你的信息中,每个点最多只会连接的一条边。问能不能连接这m条边,使这些边都不相交。
算比较裸的题目了,关键找到如何判断两对点交不交叉的关系就好
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int N = 1100;vector<int> g[N];struct node{ int x,y;}pir[N];int n,m;inline void add_edge(int u,int v){ g[u].push_back(v);}int dfn[N],low[N],tmp[N],sta[N],top;int index;void ini(){ for(int i=0;i<=2*m;i++) g[i].clear(); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(tmp,0,sizeof(tmp)); top=index=0;}void tarjan(int u){ low[u]=dfn[u]=++index; tmp[u]=1; sta[++top]=u; int sz=g[u].size(); for(int i=0;i<sz;i++) { int v=g[u][i]; if(tmp[v]==0) tarjan(v); if(tmp[v]==1) low[u]=min(low[u],low[v]); } if(dfn[u]==low[u]) { int v; do { v=sta[top--]; tmp[v]=2; low[v]=low[u]; }while(v!=u); }}bool ok(){ for(int i=0;i<2*m;i++) if(low[i]==low[i^1]) return false; return true;}int main(){ while(~scanf("%d%d",&n,&m)) { ini(); for(int i=0;i<m;i++) { scanf("%d%d",&pir[i].x,&pir[i].y); } for(int i=0;i<m;i++) for(int j=i+1;j<m;j++) { int u=i*2,v=j*2; bool f1=( pir[i].x<max(pir[j].x,pir[j].y)&&pir[i].x>min(pir[j].x,pir[j].y) ); bool f2=( pir[i].y<max(pir[j].x,pir[j].y)&&pir[i].y>min(pir[j].x,pir[j].y) ); if(f1^f2)//两点对交叉 { add_edge(u,v^1); add_edge(v,u^1); add_edge(u^1,v); add_edge(v^1,u); } } for(int i=0;i<2*m;i++) if(dfn[i]==0) tarjan(i); if(ok()) puts("panda is telling the truth..."); else puts("the evil panda is lying again"); } return 0;}
0 0
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat判解存在性)
- poj Ikki's Story IV - Panda's Trick (2-sat)
- POJ 3207 Ikki's Story IV - Panda's Trick(2-SAT判定)
- POJ 3207 Ikki's Story IV - Panda's Trick(2-SAT判断)
- [poj 3207] Ikki\'s Story IV - Panda\'s Trick(2-sat or 并查集)
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat)
- POJ-3207-Ikki's Story IV - Panda's Trick(2-sat模板)
- POJ 3207 Ikki's Story IV - Panda's Trick(2-SAT)
- POJ 3207 Ikki's Story IV - Panda's Trick(2 - sat啊)
- poj--3207--Ikki's Story IV - Panda's Trick(2-sat)
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat)
- poj 3207 Ikki's Story IV - Panda's Trick (2-SAT)
- poj 3207 Ikki's Story IV - Panda's Trick( 2-sat判定性问题,SCC缩点)
- POJ--3207[Ikki's Story IV - Panda's Trick] 第一道2—SAT
- POJ 3207 Ikki's Story IV - Panda's Trick 2-sat
- poj 3207 Ikki's Story IV - Panda's Trick 2-sat+建图
- poj 3207 Ikki's Story IV - Panda's Trick#2-sat
- poj 3207 Ikki's Story IV - Panda's Trick 2-sat+建图
- 鸡啄米vc++2010系列15(消息对话框)
- Unable to open debugger port (127.0.0.1:63777): java.net.BindException "Address already in use: JVM
- codis安装注意事项
- Makefile 学习笔记
- Linux下Hadoop hdfs Java API使用
- POJ 3207 Ikki's Story IV - Panda's Trick(2-sat判解存在性)
- php openssl rsa 加密解密
- cordova插件(旧版本)
- 异步信号安全(可重入性)与线程安全
- Rabbit MQ 安装和配置
- iOS中使用blend改变图片颜色
- Java注册邮箱激活验证实现代码
- cocostudio使用第三方字库ttf
- YII2原生SQL分页支持排序搜索