bzoj1997
题解:
在圆上面的点能不能不交叉
和那一题差不多
http://www.cnblogs.com/xuanyiming/p/8110597.html
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int T,n,m,ind,top,cnt,scc,u[N],v[N];
int c[N],pos[N],last[N],dfn[N],low[N],q[N],bl[N],inq[N];
struct edge{int to,next;}e[N*];
void jb(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=last[u];
last[u]=cnt;
}
void tarjan(int x)
{
inq[x]=;q[++top]=x;
low[x]=dfn[x]=++ind;
for (int i=last[x];i;i=e[i].next)
if (!dfn[e[i].to])tarjan(e[i].to),low[x]=min(low[x],low[e[i].to]);
else if(inq[e[i].to])low[x]=min(low[x],dfn[e[i].to]);
int now=-;
if (low[x]==dfn[x])
{
scc++;
while(now!=x)
{
now=q[top--];inq[now]=;
bl[now]=scc;
}
}
}
int jud()
{
for (int i=;i<=m;i++)
if(bl[*i]==bl[*i-])return ;
return ;
}
int main()
{
T=read();
while (T--)
{
n=read();m=read();
for (int i=;i<=m;i++)u[i]=read(),v[i]=read();
memset(last,,sizeof(last));cnt=;
scc=ind=;
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
for (int i=;i<=n;i++)c[i]=read();
if (m>*n-){puts("NO");continue;}
for (int i=;i<=n;i++)pos[c[i]]=i;
top=;
for(int i=;i<=m;i++)
{
v[i]=pos[v[i]];u[i]=pos[u[i]];
if (u[i]>v[i])swap(u[i],v[i]);
if (v[i]-u[i]==||(v[i]==n&&u[i]==))continue;
u[++top]=u[i],v[top]=v[i];
}
m=top;
for(int i=;i<=m;i++)
for (int j=i+;j<=m;j++)
if((u[i]<u[j]&&u[j]<v[i]&&v[i]<v[j])
||(u[j]<u[i]&&u[i]<v[j]&&v[j]<v[i]))
{
jb(*i-,*j);
jb(*i,*j-);
jb(*j-,*i);
jb(*j,*i-);
}
top=;
for (int i=;i<=*m;i++)
if (!dfn[i])tarjan(i);
if (jud())puts("YES");
else puts("NO");
}
return ;
}
bzoj1997的更多相关文章
- 【BZOJ1997】Planar(2-sat)
		[BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ... 
- bzoj1997 [HNOI2010]平面图判定Plana
		bzoj1997 [HNOI2010]平面图判定Planar 链接 bzoj luogu 思路 好像有很多种方法过去.我只说2-sat 环上的边,要不在里面,要不在外边. 有的边是不能同时在里面的,可 ... 
- BZOJ1997 [Hnoi2010]Planar  【2-sat】
		题目链接 BZOJ1997 题解 显然相交的两条边不能同时在圆的一侧,\(2-sat\)判一下就好了 但这样边数是\(O(m^2)\)的,无法通过此题 但是\(n\)很小,平面图 边数上界为\(3n ... 
- 【BZOJ1997】[Hnoi2010]Planar 2-SAT
		[BZOJ1997][Hnoi2010]Planar Description Input Output Sample Input 2 6 9 1 4 1 5 1 6 2 4 2 5 2 6 3 4 3 ... 
- [BZOJ1997][HNOI2010] 平面图判定
		Description Input Output 是的..BZOJ样例都没给. 题解(from 出题人): 如果只考虑简单的平面图判定,这个问题是非常不好做的. 但是题目中有一个条件— ... 
- bzoj1997: [Hnoi2010]Planar
		2-SAT. 首先有平面图定理 m<=3*n-6,如果不满足这条件肯定不是平面图,直接退出. 然后构成哈密顿回路的边直接忽略. 把哈密顿回路当成一个圆, 如果俩条边交叉(用心去感受),只能一条边 ... 
- BZOJ1997 [Hnoi2010]Planar (2-sat)
		题意:给你一个哈密顿图,判断是不是平面图 思路:先找出哈密顿图来.哈密顿回路可以看成一个环,把边集划分成两个集合,一个在环内,一个在外.如果有两条相交边在环内,则一定不是平面图,所以默认两条相交边,转 ... 
- [bzoj1997][Hnoi2010]Planar(2-sat||括号序列)
		开始填连通分量的大坑了= = 然后平面图有个性质m<=3*n-6..... 由平面图的欧拉定理n-m+r=2(r为平面图的面的个数),在极大平面图的情况可以代入得到m=3*n-6. 网上的证明( ... 
- bzoj1997 Planar
		题目链接 思路 首先以那个环为框架,把所有的边连出来.如果有两条边相交,那么就把其中一条放到环外面去. 如图: \((1,3)\)与\((2,5)相交,\)(1,4)\(与\)(2,5)相交.所以我们 ... 
- BZOJ1997 平面图判定 平面图性质 2-sat
		相交的两条边不能在同一侧,用2-sat即可. 平面图点数-边数关系 \(E\le 3V-6\) 写这篇文章我只是想说明,知乎一小时,题解一分钟. lb Zhihu, gos langar Qarwet ... 
随机推荐
- URAL - 1091 Tmutarakan Exams (简单容斥原理)
			题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ... 
- MVC[xml]页面传值
			MVC 各种传值方式 ViewData传值.HomeController.cs Co de: public ActionResult Index(){ ViewData["Titl ... 
- 进度条Demo
			package threadAndRunnable; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swi ... 
- 简单地理解HTTPS 转
			原文地址:http://www.nowamagic.net/librarys/veda/detail/2394 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等 ... 
- Hexo博客部署codingNet静态资源无法加载
			用Hexo搭建的个人博客,部署到github的pages的话,好像百度搜索不到.所以在国内的codingNet的pages服务也一起部署一下,这样方便国内国外搜索引擎收录进来.具体部署教程我是参考这里 ... 
- oracle中add_months函数的用法
			如果需要取上一个月的数据,并且每天都要进行此操作,每次都需要改时间,的确非常的麻烦,所以想到了oracle add_months函数这个函数 oracle add_months函数: oracle a ... 
- PHP SQL写法 积累(注:PHPSQL与LINQ SQL相似)
			1: $data ['parentid'] = $pid; M('menu')->where($data)->order(' id asc ')-> select(); // ... 
- 一篇关于cfDNA的综述
			文章题目:A Field Guide for Cancer Diagnostics using cell-free DNA: from Principles to Practice and Clini ... 
- 《JAVA程序设计》第五次实验报告
			20145333 实验五 Java网络编程及安全 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:3 ... 
- HDU5324 cqd分治
			HDU5324 cqd分治 标签(空格分隔): 未分类 给你两个长度相同数列,求第一个不上升,第二个不下降的最长子序列长度. 这里要求的子序列对第一个和第二个来说是相同的.即如果你在第一个序列里选了第 ... 
