http://www.lydsy.com/JudgeOnline/problem.php?id=1997

如果两条边在环内相交,那么一定也在环外相交

所以环内相交的两条边,必须一条在环内,一条在环外

这就成了2-sat问题

时间复杂度为(T*(m^2+n)),T 飞

平面图有一个结论:边数<=点数*3-6

m就与n同阶了

判断两条边是否在环内相交:

设一条边为(ui,vi),一条半为(uj,vj)

且 u在环上的编号<v

如果 ui<uj<vi<vj,则两条边会在环内相交

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 1205
#define M 1440001 int n,m; struct node
{
int u,v;
}e[],g[]; int pos[N]; int tot,front[N],to[M],nxt[M]; int low[N],dfn[N];
int st[N],top; int id[N],cnt; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} bool init()
{
read(n); read(m);
for(int i=;i<=m;++i) read(e[i].u),read(e[i].v);
int x;
for(int i=;i<=n;++i)
{
read(x);
pos[x]=i;
}
return m<=*n-;
} void add(int u,int v)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot;
to[++tot]=u; nxt[tot]=front[v]; front[v]=tot;
} void build()
{
int mm=;
int u,v;
for(int i=;i<=m;++i)
{
u=e[i].u; v=e[i].v;
if(pos[u]>pos[v]) swap(u,v);
if(pos[v]==pos[u]+) continue;
if(pos[v]==n && pos[u]==) continue;
g[++mm].u=u; g[mm].v=v;
}
m=mm;
for(int i=;i<=m;++i)
for(int j=;j<=m;++j)
if(i!=j)
if(pos[g[i].u]<pos[g[j].u] && pos[g[j].u]<pos[g[i].v] && pos[g[i].v]<pos[g[j].v])
add(i<<,j<<|),add(j<<,i<<|);
} void tarjan(int x)
{
dfn[x]=low[x]=++tot;
st[++top]=x;
for(int i=front[x];i;i=nxt[i])
if(!dfn[to[i]])
{
tarjan(to[i]);
low[x]=min(low[x],low[to[i]]);
}
else low[x]=min(low[x],dfn[to[i]]);
if(low[x]==dfn[x])
{
cnt++;
while(st[top]!=x) id[st[top--]]=cnt;
id[x]=cnt;
top--;
}
} void solve()
{
tot=;
for(int i=;i<=m;++i)
{
if(!dfn[i<<]) tarjan(i<<);
if(!dfn[i<<|]) tarjan(i<<|);
}
for(int i=;i<=m;++i)
if(id[i<<]==id[i<<|])
{
puts("NO");
return;
}
puts("YES");
} void clear()
{
tot=cnt=;
memset(front,,sizeof(front));
memset(dfn,,sizeof(dfn));
} int main()
{
int T;
read(T);
while(T--)
{
if(!init())
{
puts("NO");
continue;
}
clear();
build();
solve();
}
}

1997: [Hnoi2010]Planar

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 2445  Solved: 916
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

2
6 9
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6
1 4 2 5 3 6
5 5
1 2
2 3
3 4
4 5
5 1
1 2 3 4 5

Sample Output

NO
YES

bzoj千题计划231:bzoj1997: [Hnoi2010]Planar的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划211:bzoj1996: [Hnoi2010]chorus 合唱队

    http://www.lydsy.com/JudgeOnline/problem.php?id=1996 f[i][j][0/1] 表示已经排出队形中的[i,j],最后一个插入的人在[i,j]的i或j ...

  3. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  4. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  5. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  6. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  7. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  8. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  9. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

随机推荐

  1. effective c++ 笔记 (1-3)

    // //  effective c++.cpp //  笔记 // //  Created by fam on 15/3/23. // // //-------------------------- ...

  2. js获取浏览器对象的信息

    js中有一个对象叫 navigator,navigator 对象包含有关浏览器的信息.所有的浏览器都支持该对象. 其中经常用到的是 navigator.userAgent 属性,通常,它是在 navi ...

  3. HTML 表格实例

    1.表格这个例子演示如何在 HTML 文档中创建表格. <p>每个表格由 table 标签开始.</p><p>每个表格行由 tr 标签开始.</p>&l ...

  4. Unity接入监控摄像头

    公网RTSP测试地址: rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov RTSP测试软件: EasyPlayerRTSP: https:// ...

  5. LevelDB原理解析

    LevelDb有如下一些特点: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上. 其次, ...

  6. Linux内核分析 NO.3

    跟踪分析Linux内核的启动过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...

  7. 20135316王剑桥Linux内核学习笔记第四周

    20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可 ...

  8. Linux第二周学习总结——操作系统是如何工作的

    第二周学习总结--操作系统是如何工作的 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/course/UST ...

  9. 使用Visual Studio 2013进行单元测试

    使用Visual Studio 2013进行单元测试 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测 ...

  10. 一本通1642【例 2】Fibonacci 第 n 项

    1642: [例 2]Fibonacci 第 n 项 sol:挺模板的吧,经典题吧qaq (1) 1 0    *     1 1     =   1 1 1 0 (2) 1 1    *     1 ...