bzoj 1997 [Hnoi2010]Planar——2-SAT+平面图的一个定理

时间:2023-01-16 21:23:56

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

平面图的一个定理:若边数大于(3*点数-6),则该图不是平面图。

然后就可以2-SAT了!

注意把输入读完再用定理continue!!!

注意边是元素,所以是i+m,而且数组也应开成M<<1!!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=,M=;
int T,n,m,hd[M<<],xnt,x[M],y[M],mp[N];
int dfn[M<<],low[M<<],tim,sta[M<<],top,col[M<<],cnt;
bool ins[M<<],flag;
struct Ed{
int nxt,to;Ed(int n=,int t=):nxt(n),to(t) {}
}ed[(M*M)<<];
bool check(int i,int j)
{
int x1=mp[x[i]],y1=mp[y[i]],x2=mp[x[j]],y2=mp[y[j]];
if(x1>y1)swap(x1,y1);
if((x2>x1&&x2<y1&&(y2>y1||y2<x1))||(y2>x1&&y2<y1&&(x2>y1||x2<x1)))return true;
return false;
}
void add(int i,int j)
{
ed[++xnt]=Ed(hd[i],j+m);hd[i]=xnt;
ed[++xnt]=Ed(hd[j],i+m);hd[j]=xnt;
ed[++xnt]=Ed(hd[i+m],j);hd[i+m]=xnt;
ed[++xnt]=Ed(hd[j+m],i);hd[j+m]=xnt;
}
void tarjan(int cr)
{
dfn[cr]=low[cr]=++tim;
sta[++top]=cr;ins[cr]=;
for(int i=hd[cr],v;i;i=ed[i].nxt)
if(!dfn[v=ed[i].to])tarjan(v),low[cr]=min(low[cr],low[v]);
else if(ins[v])low[cr]=min(low[cr],dfn[v]);
if(dfn[cr]==low[cr])
{
cnt++;
while(sta[top]!=cr)col[sta[top]]=cnt,ins[sta[top--]]=;
top--;col[cr]=cnt;ins[cr]=;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);int z;
for(int i=;i<=m;i++)scanf("%d%d",&x[i],&y[i]);
for(int i=;i<=n;i++)
scanf("%d",&z),mp[z]=i;
if(m>*n-){printf("NO\n");continue;}//先把输入都读完再continue!!!
memset(hd,,sizeof hd);xnt=;
for(int i=;i<m;i++)
for(int j=i+;j<=m;j++)
if(check(i,j))add(i,j);
memset(dfn,,sizeof dfn);tim=;cnt=;
for(int i=;i<=*m;i++)if(!dfn[i])tarjan(i);
flag=;
for(int i=;i<=m;i++)
if(col[i]==col[i+m]){flag=;break;}
if(flag)printf("NO\n");
else printf("YES\n");
}
return ;
}

bzoj 1997 [Hnoi2010]Planar——2-SAT+平面图的一个定理的更多相关文章

  1. BZOJ 1997&colon; &lbrack;Hnoi2010&rsqb;Planar&lpar; 2sat &rpar;

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

  2. Bzoj 1997 &lbrack;Hnoi2010&rsqb;Planar题解

    1997: [Hnoi2010]Planar Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2224  Solved: 824[Submit][Stat ...

  3. &lbrack;BZOJ 1997&rsqb;&lbrack;HNOI2010&rsqb;Planar&lpar;2-SAT&rpar;

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1997 分析: 考虑每条边是在圈子里面还是圈子外面 所以就变成了2-SAT判定问题了= ...

  4. bzoj 1997&colon; &lbrack;Hnoi2010&rsqb;Planar

    #include<cstdio> #include<cstring> #include<iostream> #define M 20005 #define N 20 ...

  5. bzoj 1997&colon; &lbrack;Hnoi2010&rsqb;Planar【瞎搞&plus;黑白染色】

    脑补一下给出的图:一个环,然后有若干连接环点的边,我们就是要求这些边不重叠 考虑一下不重叠的情况,两个有交边一定要一个在环内一个在环外,所以把相交的边连边,然后跑黑白染色看是否能不矛盾即可(可能算个2 ...

  6. 1997&colon; &lbrack;Hnoi2010&rsqb;Planar

    1997: [Hnoi2010]Planar 链接 分析: 首先在给定的那个环上考虑进行操作,如果环内有有两条边相交,那么可以把其中的一条放到环的外面去.所以转换为2-sat问题. 像这样,由于1-4 ...

  7. bzoj千题计划231:bzoj1997&colon; &lbrack;Hnoi2010&rsqb;Planar

    http://www.lydsy.com/JudgeOnline/problem.php?id=1997 如果两条边在环内相交,那么一定也在环外相交 所以环内相交的两条边,必须一条在环内,一条在环外 ...

  8. &lbrack;BZOJ1997&rsqb;&lbrack;Hnoi2010&rsqb;Planar 2-sat (联通分量) 平面图

    1997: [Hnoi2010]Planar Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2317  Solved: 850[Submit][Stat ...

  9. &lbrack;bzoj1997&rsqb;&lbrack;Hnoi2010&rsqb;Planar&lpar;2-sat&vert;&vert;括号序列&rpar;

    开始填连通分量的大坑了= = 然后平面图有个性质m<=3*n-6..... 由平面图的欧拉定理n-m+r=2(r为平面图的面的个数),在极大平面图的情况可以代入得到m=3*n-6. 网上的证明( ...

随机推荐

  1. centos7搭建samb

    1,smb配置文件 [global] workgroup = WORKGROUP netbios name = LinuxSir05 server string = Linux Samba Serve ...

  2. 【JavaEE企业应用实战学习记录】MyGetAttributeListener

    package sanglp.servlet; import javax.servlet.ServletContext; import javax.servlet.ServletContextAttr ...

  3. AutoMapper&period;EF6

    https://github.com/AutoMapper/AutoMapper.EF6 Extensions for AutoMapper and EF6 This contains some us ...

  4. 【Spring 核心】AOP 面向切面编程

    一.什么是面向切面编程? 二.通过切点来选择连接点 三.使用注解创建切面 四.在XML中声明切面 五.注入AspectJ切面

  5. SystemVerilog语言简介&lpar;三&rpar;

    15. 强制类型转换 Verilog不能将一个值强制转换成不同的数据类型.SystemVerilog通过使用'操作符提供了数据类型的强制转换功能.这种强制转换可以转换成任意类型,包括用户定义的类型.例 ...

  6. WebvirtCloud安装&lpar;CentOS7&rpar;

    1.安装依赖包wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum -y install p ...

  7. day059-60 ajax初识 登录认证练习 form装饰器&comma; form和ajax上传文件 contentType

    一.ajax 的特点 1.异步交互:客户端发出一个请求后,需要等待服务器响应结束后, 才能发出第二个请求 2.局部刷新:给用户的感受是在不知不觉中完成请求和响应过程. 二.ajax 模板示例 ($.a ...

  8. docker简单操作

    下载镜像docker pull httpd(镜像名) 查看镜像:docker images 做容器 docker run -ti -v(映射)/www:发布目录的路径 -p 80:80 --name ...

  9. Django分页设置

    1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...

  10. discuz 积分按日重新计算,(摒弃以前24小时计算)

    修改\source\module\forum\forum_misc.php将 foreach(C::t('forum_ratelog')->fetch_all_sum_score($_G['ui ...