P3209 [HNOI2010]平面图判定
哈密尔顿环之外的任意一条边,要么连在环内部,要么连在环外部
判断两条边在同一部分会相交,则这两条边必须分开
那么把边看作点连边,跑二分图染色就行
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long LL;
const LL maxn=500000;
inline LL read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0'; c=getchar();
}return x*f;
}
struct node{
LL to,next;
}dis[maxn];
LL T,num,n,m;
LL head[maxn],belong[maxn],edge[maxn][2],a[maxn];
bool f;
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]}; head[u]=num;
}
inline bool Check(LL u1,LL v1,LL u2,LL v2){
return (u1<u2&&u2<v1&&v1<v2)||(u2<u1&&u1<v2&&v2<v1);
}
bool Dfs(LL u,LL c){
belong[u]=c;
for(LL i=head[u];i;i=dis[i].next){
LL v=dis[i].to;
if(belong[v]==c)
return false;
if(!belong[v]&&!Dfs(v,3-c))
return false;
}
return true;
}
int main(){
T=read();
while(T--){
n=read(),m=read();
for(LL i=1;i<=m;++i)
edge[i][0]=read(),
edge[i][1]=read();
for(LL i=1;i<=n;++i)
a[read()]=i;
if(m>3*n-6){
printf("NO\n");
continue;
}
memset(head,0,sizeof(head)); num=0;
for(LL i=1;i<=m;++i)
for(LL j=i+1;j<=m;++j){
LL u1=a[edge[i][0]],v1=a[edge[i][1]];
LL u2=a[edge[j][0]],v2=a[edge[j][1]];
if(u1>v1)
swap(u1,v1);
if(u2>v2)
swap(u2,v2);
if(Check(u1,v1,u2,v2)){
Add(i,j);
Add(j,i);
}
}
f=false;
memset(belong,0,sizeof(belong));
for(LL i=1;i<=m;++i)
if(!belong[i])
if(!Dfs(i,1)){
f=true;
break;
}
if(f)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
P3209 [HNOI2010]平面图判定的更多相关文章
- Luogu P3209 [HNOI2010]平面图判定(2-SAT)
P3209 [HNOI2010]平面图判定 题意 题目描述 若能将无向图\(G=(V,E)\)画在平面上使得任意两条无重合顶点的边不相交,则称\(G\)是平面图.判定一个图是否为平面图的问题是图论中的 ...
- 洛谷 P3209 [HNOI2010] 平面图判定
链接: P3209 题意: 给出 \(T\) 张无向图 \((T\leq100)\),并给出它对应的哈密顿回路,判断每张图是否是平面图. 分析: 平面图判定问题貌似是有线性做法的,这里给出链接,不是本 ...
- 洛谷P3209 [HNOI2010]平面图判定(2-SAT)
传送门 看到哈密顿回路就被吓傻了……结果没有好好考虑性质…… 首先,平面图有个性质:边数小于等于$3n-6$(我也不知道为啥),边数大于这个的直接pass 然后考虑原图,先把哈密顿回路单独摘出来,就是 ...
- bzoj1997 [HNOI2010]平面图判定Plana
bzoj1997 [HNOI2010]平面图判定Planar 链接 bzoj luogu 思路 好像有很多种方法过去.我只说2-sat 环上的边,要不在里面,要不在外边. 有的边是不能同时在里面的,可 ...
- [BZOJ1997][HNOI2010] 平面图判定
Description Input Output 是的..BZOJ样例都没给. 题解(from 出题人): 如果只考虑简单的平面图判定,这个问题是非常不好做的. 但是题目中有一个条件— ...
- [HNOI2010]平面图判定
Description: 若能将无向图 \(G=(V, E)\) 画在平面上使得任意两条无重合顶点的边不相交,则称 \(G\) 是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你 ...
- Luogu3209 HNOI2010 平面图判定 平面图、并查集
传送门 题意:$T$组数据,每组数据给出一个$N$个点,$M$条边,并存在一个$N$元环的图,试判断其是否为一个可平面图(如果存在一种画法,使得该图与给出的图同构且边除了在顶点处以外互相不相交,则称其 ...
- [HNOI2010] 平面图判定 planar
标签:二分图判定.题解: 首先可以把题目中给你的那个环给画出来,这样就可以发现对于任意一个图来说,如果两条边要相交,就不能让他们相交,那么这两条边就要一条在里面一条在外面,如果把环画成一条链,那么就是 ...
- BZOJ1997 HNOI2010 平面图判定 planar (并查集判二分图)
题意 判断一个存在哈密顿回路的图是否是平面图. n≤200,m≤10000n\le200,m\le10000n≤200,m≤10000 题解 如果一定存在一个环,那么连的边要么在环里面要么在外面.那么 ...
随机推荐
- MFC中 CString类型用fprintf 函数写到文件中乱码的解决办法
在上一篇中记录了用fprintf函数写内容到文件中的方法,但是发现了问题:产生的文件字符串有乱码现象. 解决办法:用_ftprintf函数 另外,据说: unicode的话要用fwprintf ...
- Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法
折腾了一天遇到了几个头疼的问题,还好回去前解决掉了 第一个:执行cxfreeze打包好的程序遇到 tkinter 和 _tkinter的缺失问题 首先终端:python tkinter python ...
- Redis的安装和环境的搭建并设置服务(Redis学习笔记一)
由于Redis在win上安装实在是太过于麻烦.我们选择把redis安装部署在linux上,然后远程连接. 安装Redis (1)cd /usr/src 进入下载目录 (1) yum install - ...
- C# DataTable 总结
(1)构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例. ...
- template.js文档
参见GitHub:https://github.com/yanhaijing/template.js/ template.js简介: template.js 一款javascript模板引擎,简单,好 ...
- [技术讨论]关于前几天公布的京东bug上的问题分析
1. 起因 前两天我公布了一个京东微信端截取到的三张图.并简单阐述了这三张图中的bug发现过程: 有朋友的评价是图中这种,可实际上.他应该是没有看出来这个bug代表的内容有多少.今天心血来潮决定具体 ...
- 12306 外包给阿里巴巴、IBM 等大企业做是否可行?
知乎上看到的,转载过来,雅俗共赏 12306首秀被骂的狗血喷头后铁道部找来IBM.阿里巴巴等大企业要解决方式,给出的条件是资金管够可是问题得解决. 几大企业最后都拒绝了(当中阿里巴巴最后负责了排队系统 ...
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
Permutations II Given a collection of numbers that might contain duplicates, return all possible un ...
- Maven的安装以及在IDEA中的配置
Maven的安装 之前的一篇博客中已经写到过了Maven的安装.这里就只给出链接了. http://www.cnblogs.com/tuhooo/p/5905569.html 版本虽然不同,但是安装的 ...
- IPv4地址(二)网络划分
在IPv4地址(一)中提到过,IP地址可以分成两部分,前面一部分是网络号,而后面一部分是主机号. 这里网络可以通过主机数量规模不同而分为3类:大型网络.中型网络和小型网络. 不同网络的特点 大型网络— ...