还是那句话,做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 ;
}

最新文章

  1. ASP.NET MVC 让@Html.DropDownList显示默认值
  2. JavaScript 获取HTML中的CSS样式的属性以及值的的方法。
  3. CSS自适应布局(左右固定 中间自适应或者右侧固定 左侧自适应)
  4. IE 文档模式
  5. Servlet页面登录的数据库验证程序(二)
  6. 让HTML页面缩放适应移动客户端尺寸
  7. “System.Web.UI.WebControls.Literal”不允许使用子控件
  8. SQL Server 阻止了对组件 &#39;Ole Automation Procedures&#39; 的 过程&#39;sys.sp_OACreate&#39; 的访问
  9. java 对象序列化
  10. XOR双向链表
  11. unix shell: ksh fundamental(Korn Shell)
  12. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)浅谈 REST 和 CRUD
  13. MySQL插入数据时插入无效的列
  14. Docker---Run命令
  15. springboot整合freemarker----一点小小的错误
  16. Redis学习资料整理
  17. [BZOJ2432][Noi2011]兔农 矩阵乘法+exgcd
  18. python可视化
  19. linux查看硬盘空间 文件大小
  20. JSP页面获取下来框select选中项的值和文本的方法

热门文章

  1. RCF:一个相当不错的C++分布式RPC框架
  2. UIDynamicBehavior的简单使用:接球小游戏
  3. sdut1269 走迷宫(dfs)
  4. Appium + python - input操作实例
  5. Electron桌面应用:环境搭建
  6. BZOJ 1511 KMP
  7. Elasticsearch之curl删除索引库
  8. (转)Vue 爬坑之路(二)—— 组件之间的数据传递
  9. windows下react-native搭建环境
  10. ★Java语法(二)——————————数据类型及装换