题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1997

神奇的经典2-SAT问题!

对于两个相交的区间,只能一里一外连边,所以可以进行2-SAT问题的建模;

但 m 太大了,可以用一个平面图的定理,m <= 3*n - 6 来缩小范围;

注意特判要等读入结束后再判掉!!!

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=2005,maxm=10005;//
int n,m,T,hd[maxn],ct,dfn[maxn],low[maxn],cr,col[maxn];
int tim,l[maxn],r[maxn],a[maxn],sta[maxn],top;
bool vis[maxn];
struct N{int to,nxt;N(int t=0,int n=0):to(t),nxt(n) {}
}ed[maxn*maxn*2];
void add(int x,int y){ed[++ct]=N(y,hd[x]); hd[x]=ct;}
void tarjan(int x)
{dfn[x]=low[x]=++tim;sta[++top]=x; vis[x]=1;for(int i=hd[x],u;i;i=ed[i].nxt){if(!dfn[u=ed[i].to])tarjan(u),low[x]=min(low[x],low[u]);else if(vis[u])low[x]=min(low[x],dfn[u]);}if(low[x]==dfn[x]){cr++; int y;while((y=sta[top])!=x){top--; vis[y]=0; col[y]=cr;}top--; vis[x]=0; col[x]=cr;}
}
int main()
{scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d",&l[i],&r[i]);for(int i=1,x;i<=n;i++)scanf("%d",&x),a[x]=i;if(m>3*n-6){printf("NO\n"); continue;}//先读完再判NO!!! int tp=0;for(int i=1;i<=m;i++){l[i]=a[l[i]],r[i]=a[r[i]];if(l[i]>r[i])swap(l[i],r[i]);
//            if(r[i]-l[i]==1||(r[i]==n&&l[i]==1))continue;//没有也可
//            l[++tp]=l[i],r[tp]=r[i];
        }
//        m=tp;ct=0; memset(hd,0,sizeof hd);for(int i=1;i<=m;i++)for(int j=i+1;j<=m;j++){if((l[i]<l[j]&&r[i]<r[j]&&r[i]>l[j])||(l[j]<l[i]&&r[j]<r[i]&&r[j]>l[i]))add(i,j+m),add(j+m,i),add(j,i+m),add(i+m,j);}tim=0; top=0; cr=0;memset(low,0,sizeof low);
//        memset(col,0,sizeof col);memset(dfn,0,sizeof dfn);for(int i=1;i<=m*2;i++)if(!dfn[i])tarjan(i);bool fl=0;for(int i=1;i<=m;i++)if(col[i]==col[i+m]){fl=1; break;}if(fl)printf("NO\n");else printf("YES\n");}return 0;
}

转载于:https://www.cnblogs.com/Zinn/p/9280403.html

bzoj1997 [Hnoi2010]Planar——2-SAT相关推荐

  1. bzoj1997 [HNOI2010]平面图判定Plana

    bzoj1997 [HNOI2010]平面图判定Planar 链接 bzoj luogu 思路 好像有很多种方法过去.我只说2-sat 环上的边,要不在里面,要不在外边. 有的边是不能同时在里面的,可 ...

  2. BZOJ 1997: [Hnoi2010]Planar( 2sat )

    平面图中E ≤ V*2-6.. 一个圈上2个点的边可以是在外或者内, 经典的2sat问题.. ----------------------------------------------------- ...

  3. bzoj 1997: [Hnoi2010]Planar

    Description 若能将无向图 G=(V,E)画在平面上使得任意两条无重合顶点的边不相交,则称 G 是平面图. 判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你要判定的是一类特殊的 ...

  4. [HNOI2010 Planar平面图判定]

    [关键字]:图论 二分图 [题目大意]:给出一个带有汉密尔顿回路的图,判断它是否是一个平面图. //================================================== ...

  5. 【BZOJ1997】【HNOI2010】Planar(2-SAT,平面图,并查集)

    Description Solution 首先如果边数大于 3n−6 3 n − 6 3n-6直接输出NO 我们将哈密顿回路看做一个圆,一对边如果全部在圆内相连会相交,那么它们如果全部在圆外连边也会相 ...

  6. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  7. 做题记录 To 2019.2.13

    2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...

  8. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  9. AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

    [HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  10. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

最新文章

  1. lstm数学推导_手推公式:LSTM单元梯度的详细的数学推导
  2. 引号不是字符串中唯一的可以被转义字符。下面是常见的转义序列列表:
  3. html符号纵向,HTML常用特殊符号对照表与一些标签说明.pdf
  4. 【数据结构与算法】之深入解析“四数之和”的求解思路与算法示例
  5. 如何写出优雅的异常处理
  6. hybris安装执行install.sh -r b2c_acc initialize遇到build错误 8983端口
  7. Spring Boot 的starter pom
  8. 基于Ubuntu12.04下的Keystone源码安装
  9. 【leetcode】1023. Camelcase Matching
  10. sed和awk常用命令式例
  11. 自我监督学习和无监督学习_弱和自我监督的学习-第4部分
  12. 浏览器iframe跨域
  13. 小米路由mini刷潘多拉及老毛子固件-详细教程
  14. 如何制作unity艺术字体
  15. 51nod 1108.距离之和最小 V2 - 曼哈顿距离
  16. RT-Thread:STM32F407虚拟U盘,无法识别拔出问题解决方案
  17. c++ 中关于引用(1)
  18. Visual Studio/AnkhSVN在VS中出现SVN代码冲突的解决方法
  19. Canvas 动画引擎解析与微信小程序中的应用
  20. Frammer X for Mac(视频截图软件)

热门文章

  1. 部署Vista(7)——创建一个最基本的应答文件
  2. WebUI Case(1): www.swt-designer.com 首页 (续)
  3. linux jvm启动过程,Linux操作系统启动过程详解
  4. cc ai条码插件_科脉神秘黑科技产品横空出世,AI能为生鲜称重带来哪些变革?
  5. 设计模式之——抽象工厂模式
  6. DWR整合Spring
  7. [渝粤教育] 中国地质大学 管理信息系统 复习题
  8. 从socket中可以获取信息
  9. Animal-AI 2.0.0发布了!快来测试你的智能体吧。
  10. DOM基础操作(三)