Bzoj 1997 [Hnoi2010]Planar题解
1997: [Hnoi2010]Planar
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 2224 Solved: 824
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
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
YES
HINT
Source
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<queue>
#define N 300
using namespace std;
struct ro{
int to;
int next;
}road[**];
int t,n,m,zz,a[],f[][],pos[N],zz1;
void build(int x,int y)
{
zz++;
road[zz].to=y;
road[zz].next=a[x];
a[x]=zz;
}
int dfn[],low[],zz2,top,st[],bel[],zz3;
bool rd[],rd2[];
void tar(int x)
{
zz2++;
dfn[x]=low[x]=zz2;
top++;
st[top]=x;
rd[x]=rd2[x]=;
for(int i=a[x];i>;i=road[i].next)
{
int y=road[i].to;
if(!rd2[y])
{
tar(y);
low[x]=min(low[x],low[y]);
}
else if(rd[y])
{
low[x]=min(dfn[y],low[x]);
}
}
if(dfn[x]==low[x])
{
zz3++;
int v;
do{
v=st[top];
top--;
rd[v]=;
bel[v]=zz3;
}while(dfn[v]!=low[v]);
}
}
int main(){
scanf("%d",&t);
while(t--)
{
memset(a,,sizeof(a));
top=;
memset(rd2,,sizeof(rd2));
zz3=zz2=;
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
zz=zz1=;
memset(bel,,sizeof(bel));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&f[i][],&f[i][]);
}
for(int i=;i<=n;i++)
{
int x;
scanf("%d",&x);
pos[x]=i;
}
if(n*-<m)
{
printf("NO\n");
continue;
}
for(int i=;i<=m;i++)
{
int fr=f[i][],to=f[i][];
fr=pos[fr],to=pos[to];
if(fr>to)swap(fr,to);
if(to-fr==||(to==n&&fr==))continue;
zz1++;
f[zz1][]=fr,f[zz1][]=to;
}
m=zz1;
for(int i=;i<=m;i++)
{
for(int j=i+;j<=m;j++)
{
if(f[i][]<f[j][]&&f[i][]<f[j][]&&f[i][]>f[j][])
{
build(i*,j*-);
build(j*-,i*);
build(j*,i*-);
build(i*-,j*);
}
else if(f[j][]<f[i][]&&f[j][]<f[i][]&&f[i][]<f[j][])
{
build(i*,j*-);
build(j*-,i*);
build(j*,i*-);
build(i*-,j*);
}
}
}
for(int i=;i<=*m;i++)
{
if(!rd2[i])
{
tar(i);
}
}
bool yx=;
for(int i=;i<=m;i++)
{
if(bel[i*]==bel[i*-])
{
yx=;
break;
}
}
if(yx)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return ;
}
Bzoj 1997 [Hnoi2010]Planar题解的更多相关文章
- BZOJ 1997: [Hnoi2010]Planar( 2sat )
平面图中E ≤ V*2-6.. 一个圈上2个点的边可以是在外或者内, 经典的2sat问题.. ----------------------------------------------------- ...
- [BZOJ 1997][HNOI2010]Planar(2-SAT)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1997 分析: 考虑每条边是在圈子里面还是圈子外面 所以就变成了2-SAT判定问题了= ...
- bzoj 1997 [Hnoi2010]Planar——2-SAT+平面图的一个定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1997 平面图的一个定理:若边数大于(3*点数-6),则该图不是平面图. 然后就可以2-SAT ...
- bzoj 1997: [Hnoi2010]Planar
#include<cstdio> #include<cstring> #include<iostream> #define M 20005 #define N 20 ...
- bzoj 1997: [Hnoi2010]Planar【瞎搞+黑白染色】
脑补一下给出的图:一个环,然后有若干连接环点的边,我们就是要求这些边不重叠 考虑一下不重叠的情况,两个有交边一定要一个在环内一个在环外,所以把相交的边连边,然后跑黑白染色看是否能不矛盾即可(可能算个2 ...
- 1997: [Hnoi2010]Planar
1997: [Hnoi2010]Planar 链接 分析: 首先在给定的那个环上考虑进行操作,如果环内有有两条边相交,那么可以把其中的一条放到环的外面去.所以转换为2-sat问题. 像这样,由于1-4 ...
- BZOJ1997:[HNOI2010]PLANAR——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1997 https://www.luogu.org/problemnew/show/P3209 若能 ...
- bzoj千题计划231:bzoj1997: [Hnoi2010]Planar
http://www.lydsy.com/JudgeOnline/problem.php?id=1997 如果两条边在环内相交,那么一定也在环外相交 所以环内相交的两条边,必须一条在环内,一条在环外 ...
- [bzoj1997][Hnoi2010]Planar(2-sat||括号序列)
开始填连通分量的大坑了= = 然后平面图有个性质m<=3*n-6..... 由平面图的欧拉定理n-m+r=2(r为平面图的面的个数),在极大平面图的情况可以代入得到m=3*n-6. 网上的证明( ...
随机推荐
- Codejock.Xtreme.Toolkit.Pro.v15.3.1 下载 与 VS2015补丁使用方法
Codejock.Xtreme.Toolkit.Pro.v15.3.1 下载 与 VS2015补丁使用方法 打算放在CSDN进行下载的,上传完成后发现资源分设置的1分,本打算赚点下载分的.在页面上没有 ...
- 用VS2010构建MASM的编程环境,开始使用MASM(翻译自《Inetl汇编语言程序设计》一书的作者Kip R. Irvine的文章Getting Started with MASM),两种方法搭建IA-32汇编设计环境
http://blog.csdn.net/jinsonghu/article/details/5688020 http://blog.csdn.net/jinsonghu/article/detail ...
- Qt5.5.0在Windows下静态编译(修改参数以后才能支持XP)good
测试系统环境: windows 7 编译软件环境: vs2013 + QT5.5.0 [源码地址:http://download.qt.io/official_releases/qt/5.5/5.5. ...
- QAbstractItemView为截断的项显示ToolTip(使用事件过滤)
在Qt中想要为QAbstractItemView中长度不够而使得内容被截断的项显示ToolTip,Qt官网有一篇文章介绍使用事件过滤器来显示太长的项,但是没有涵盖图标的情况.显示列头项太长的情况等等, ...
- Qt5 结构及模块组成?
作为一个Qt的粉丝,对将于明年发布的Qt5充满了期待.可是想想Qt5将发生的巨大变化,心底又有点不安.Qt5到底会变成什么样呢? 看看近期Qt5的一些大动作: 从 QtCore中移除 QSetting ...
- Qt 之 样式表的使用——样式选择器(上下篇,很详细)
http://blog.csdn.net/goforwardtostep/article/details/60884870 http://blog.csdn.net/goforwardtostep/a ...
- lodop+art-template实现web端漂亮的小票样式打印
一. 现状 由于之前采用Lodop打印控件(商业版付费,可以使用免费版 但是会有水印)去打印小票,是一行一行的打印,但是不满足UI给到复杂布局的小票样式,所以得重新考虑如何来实现. 二. 介绍 art ...
- kali 源文件 更改和使用 更新日期:2018.04.21
我的公众号,正在建设中,欢迎关注: 0x01 源文件格式: kali下常用的更新命令有: apt-get install update和apt-get install upgrade,update是下 ...
- 修改linux(kali)和windows双系统下默认启动系统和启动延时
我的公众号,正在建设中,欢迎关注: windows和kali双系统安装完成后kali是默认的启动系统,现将windows设置为默认启动系统并更改选择系统等待时间 1.开机时当运行到系统选择菜单时记下w ...
- 【入门】WebRTC知识点概览 | 内有技术干货免费下载
什么是WebRTC WebRTC 即Web Real-Time Communication(网页实时通信)的缩写,是一个支持网页浏览器之间进行实时数据传输(包括音频.视频.数据流)的技术.经过多年的发 ...