P3209 [HNOI2010]平面图判定

哈密尔顿环之外的任意一条边,要么连在环内部,要么连在环外部

判断两条边在同一部分会相交,则这两条边必须分开

那么把边看作点连边,跑二分图染色就行

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. using namespace std;
  6. typedef long long LL;
  7. const LL maxn=500000;
  8. inline LL read(){
  9. LL x=0,f=1; char c=getchar();
  10. while(c<'0'||c>'9'){
  11. if(c=='-') f=-1; c=getchar();
  12. }
  13. while(c>='0'&&c<='9'){
  14. x=x*10+c-'0'; c=getchar();
  15. }return x*f;
  16. }
  17. struct node{
  18. LL to,next;
  19. }dis[maxn];
  20. LL T,num,n,m;
  21. LL head[maxn],belong[maxn],edge[maxn][2],a[maxn];
  22. bool f;
  23. inline void Add(LL u,LL v){
  24. dis[++num]=(node){v,head[u]}; head[u]=num;
  25. }
  26. inline bool Check(LL u1,LL v1,LL u2,LL v2){
  27. return (u1<u2&&u2<v1&&v1<v2)||(u2<u1&&u1<v2&&v2<v1);
  28. }
  29. bool Dfs(LL u,LL c){
  30. belong[u]=c;
  31. for(LL i=head[u];i;i=dis[i].next){
  32. LL v=dis[i].to;
  33. if(belong[v]==c)
  34. return false;
  35. if(!belong[v]&&!Dfs(v,3-c))
  36. return false;
  37. }
  38. return true;
  39. }
  40. int main(){
  41. T=read();
  42. while(T--){
  43. n=read(),m=read();
  44. for(LL i=1;i<=m;++i)
  45. edge[i][0]=read(),
  46. edge[i][1]=read();
  47. for(LL i=1;i<=n;++i)
  48. a[read()]=i;
  49. if(m>3*n-6){
  50. printf("NO\n");
  51. continue;
  52. }
  53. memset(head,0,sizeof(head)); num=0;
  54. for(LL i=1;i<=m;++i)
  55. for(LL j=i+1;j<=m;++j){
  56. LL u1=a[edge[i][0]],v1=a[edge[i][1]];
  57. LL u2=a[edge[j][0]],v2=a[edge[j][1]];
  58. if(u1>v1)
  59. swap(u1,v1);
  60. if(u2>v2)
  61. swap(u2,v2);
  62. if(Check(u1,v1,u2,v2)){
  63. Add(i,j);
  64. Add(j,i);
  65. }
  66. }
  67. f=false;
  68. memset(belong,0,sizeof(belong));
  69. for(LL i=1;i<=m;++i)
  70. if(!belong[i])
  71. if(!Dfs(i,1)){
  72. f=true;
  73. break;
  74. }
  75. if(f)
  76. printf("NO\n");
  77. else
  78. printf("YES\n");
  79. }
  80. return 0;
  81. }

  

P3209 [HNOI2010]平面图判定的更多相关文章

  1. Luogu P3209 [HNOI2010]平面图判定(2-SAT)

    P3209 [HNOI2010]平面图判定 题意 题目描述 若能将无向图\(G=(V,E)\)画在平面上使得任意两条无重合顶点的边不相交,则称\(G\)是平面图.判定一个图是否为平面图的问题是图论中的 ...

  2. 洛谷 P3209 [HNOI2010] 平面图判定

    链接: P3209 题意: 给出 \(T\) 张无向图 \((T\leq100)\),并给出它对应的哈密顿回路,判断每张图是否是平面图. 分析: 平面图判定问题貌似是有线性做法的,这里给出链接,不是本 ...

  3. 洛谷P3209 [HNOI2010]平面图判定(2-SAT)

    传送门 看到哈密顿回路就被吓傻了……结果没有好好考虑性质…… 首先,平面图有个性质:边数小于等于$3n-6$(我也不知道为啥),边数大于这个的直接pass 然后考虑原图,先把哈密顿回路单独摘出来,就是 ...

  4. bzoj1997 [HNOI2010]平面图判定Plana

    bzoj1997 [HNOI2010]平面图判定Planar 链接 bzoj luogu 思路 好像有很多种方法过去.我只说2-sat 环上的边,要不在里面,要不在外边. 有的边是不能同时在里面的,可 ...

  5. [BZOJ1997][HNOI2010] 平面图判定

    Description Input Output     是的..BZOJ样例都没给.     题解(from 出题人): 如果只考虑简单的平面图判定,这个问题是非常不好做的. 但是题目中有一个条件— ...

  6. [HNOI2010]平面图判定

    Description: 若能将无向图 \(G=(V, E)\) 画在平面上使得任意两条无重合顶点的边不相交,则称 \(G\) 是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你 ...

  7. Luogu3209 HNOI2010 平面图判定 平面图、并查集

    传送门 题意:$T$组数据,每组数据给出一个$N$个点,$M$条边,并存在一个$N$元环的图,试判断其是否为一个可平面图(如果存在一种画法,使得该图与给出的图同构且边除了在顶点处以外互相不相交,则称其 ...

  8. [HNOI2010] 平面图判定 planar

    标签:二分图判定.题解: 首先可以把题目中给你的那个环给画出来,这样就可以发现对于任意一个图来说,如果两条边要相交,就不能让他们相交,那么这两条边就要一条在里面一条在外面,如果把环画成一条链,那么就是 ...

  9. BZOJ1997 HNOI2010 平面图判定 planar (并查集判二分图)

    题意 判断一个存在哈密顿回路的图是否是平面图. n≤200,m≤10000n\le200,m\le10000n≤200,m≤10000 题解 如果一定存在一个环,那么连的边要么在环里面要么在外面.那么 ...

随机推荐

  1. ubuntu下C/C++编程起步

    1. 安装VMware虚拟机软件 2. 在VMware中安装linux系统,这里安装的是Ubuntu.(用 VMware 安装 Ubuntu 12.04详细过程图解) 3. ubuntu有自带文本编辑 ...

  2. z pre-pass 相关问题的讨论

    z pre-pass 是指在渲染流程中,第一个pass先画一张深度buffer出来,得到需要绘制的最前面这层深度,用这个在接下来的pass中做深度剔出,这样在第二个pass中会省略很多绘制. 这项技术 ...

  3. 由内省引出JavaBean的应用

    IntroSpector-->javaBean-->特殊的java类 get和set方法 ReflectPoint pt1 = new ReflectPoint(3,5); String ...

  4. linux中expr用法

    名称:expr  ### 字串长度  shell>> expr length "this is a test"  14  ### 数字商数  shell>> ...

  5. 2014年辛星解读Javascript之DOM高速入门

    在Javascript的知识中,有一个所谓的DOM.即文档对象模型,我们能够通过它来訪问HTML文档的元素,当网页被载入的时候,浏览器会去创建DOM,有了这个DOM.我们能够使用Javascript去 ...

  6. 微信小程序 - 考试前三排名实现

    实现原理:利用背景图片以及nth-child实现

  7. Android使用OKHttp3实现下载(断点续传、显示运行进度)

    OKHttp3是现在很流行的Android网络请求框架,那么怎样利用Android实现断点续传呢,今天写了个Demo尝试了一下,感觉还是有点意思 准备阶段 我们会用到OKHttp3来做网络请求,使用R ...

  8. dedecms织梦后台password忘记了怎么办?dedecms织梦后台password忘记怎样找回password?

    方法一:自己用解密的方式 用phpmyadmin登陆后台数据库,查看 找到password:去除前三位和后一位,然后拷贝到http://www.cmd5.com/在线解密工具里面解密 watermar ...

  9. ExtJs4学习(一):正确认识ExtJs4

    认识ExtJs 1.Javat能用ExtJs吗? 它是展现层的技术,与JS,HTML,CSS有关.至于server端是.Net,还是PHP等无关. 2.ExtJs适合什么样的项目? 依照官方的说法,E ...

  10. p90x 涵盖了全部方式的健身方式美国经典训练DVD

    http://baike.baidu.com/view/2602721.htm  p90x是美国经典训练DVD, 涵盖了全部方式的健身方式13张Beachbody P90X DVD全集,90天魔鬼训练 ...