题解:

在圆上面的点能不能不交叉

和那一题差不多

http://www.cnblogs.com/xuanyiming/p/8110597.html

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. int read()
  5. {
  6. int x=,f=;char ch=getchar();
  7. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  8. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  9. return x*f;
  10. }
  11. int T,n,m,ind,top,cnt,scc,u[N],v[N];
  12. int c[N],pos[N],last[N],dfn[N],low[N],q[N],bl[N],inq[N];
  13. struct edge{int to,next;}e[N*];
  14. void jb(int u,int v)
  15. {
  16. e[++cnt].to=v;
  17. e[cnt].next=last[u];
  18. last[u]=cnt;
  19. }
  20. void tarjan(int x)
  21. {
  22. inq[x]=;q[++top]=x;
  23. low[x]=dfn[x]=++ind;
  24. for (int i=last[x];i;i=e[i].next)
  25. if (!dfn[e[i].to])tarjan(e[i].to),low[x]=min(low[x],low[e[i].to]);
  26. else if(inq[e[i].to])low[x]=min(low[x],dfn[e[i].to]);
  27. int now=-;
  28. if (low[x]==dfn[x])
  29. {
  30. scc++;
  31. while(now!=x)
  32. {
  33. now=q[top--];inq[now]=;
  34. bl[now]=scc;
  35. }
  36. }
  37. }
  38. int jud()
  39. {
  40. for (int i=;i<=m;i++)
  41. if(bl[*i]==bl[*i-])return ;
  42. return ;
  43. }
  44. int main()
  45. {
  46. T=read();
  47. while (T--)
  48. {
  49. n=read();m=read();
  50. for (int i=;i<=m;i++)u[i]=read(),v[i]=read();
  51. memset(last,,sizeof(last));cnt=;
  52. scc=ind=;
  53. memset(low,,sizeof(low));
  54. memset(dfn,,sizeof(dfn));
  55. for (int i=;i<=n;i++)c[i]=read();
  56. if (m>*n-){puts("NO");continue;}
  57. for (int i=;i<=n;i++)pos[c[i]]=i;
  58. top=;
  59. for(int i=;i<=m;i++)
  60. {
  61. v[i]=pos[v[i]];u[i]=pos[u[i]];
  62. if (u[i]>v[i])swap(u[i],v[i]);
  63. if (v[i]-u[i]==||(v[i]==n&&u[i]==))continue;
  64. u[++top]=u[i],v[top]=v[i];
  65. }
  66. m=top;
  67. for(int i=;i<=m;i++)
  68. for (int j=i+;j<=m;j++)
  69. if((u[i]<u[j]&&u[j]<v[i]&&v[i]<v[j])
  70. ||(u[j]<u[i]&&u[i]<v[j]&&v[j]<v[i]))
  71. {
  72. jb(*i-,*j);
  73. jb(*i,*j-);
  74. jb(*j-,*i);
  75. jb(*j,*i-);
  76. }
  77. top=;
  78. for (int i=;i<=*m;i++)
  79. if (!dfn[i])tarjan(i);
  80. if (jud())puts("YES");
  81. else puts("NO");
  82. }
  83. return ;
  84. }

bzoj1997的更多相关文章

  1. 【BZOJ1997】Planar(2-sat)

    [BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...

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

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

  3. BZOJ1997 [Hnoi2010]Planar 【2-sat】

    题目链接 BZOJ1997 题解 显然相交的两条边不能同时在圆的一侧,\(2-sat\)判一下就好了 但这样边数是\(O(m^2)\)的,无法通过此题 但是\(n\)很小,平面图 边数上界为\(3n ...

  4. 【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 ...

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

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

  6. bzoj1997: [Hnoi2010]Planar

    2-SAT. 首先有平面图定理 m<=3*n-6,如果不满足这条件肯定不是平面图,直接退出. 然后构成哈密顿回路的边直接忽略. 把哈密顿回路当成一个圆, 如果俩条边交叉(用心去感受),只能一条边 ...

  7. BZOJ1997 [Hnoi2010]Planar (2-sat)

    题意:给你一个哈密顿图,判断是不是平面图 思路:先找出哈密顿图来.哈密顿回路可以看成一个环,把边集划分成两个集合,一个在环内,一个在外.如果有两条相交边在环内,则一定不是平面图,所以默认两条相交边,转 ...

  8. [bzoj1997][Hnoi2010]Planar(2-sat||括号序列)

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

  9. bzoj1997 Planar

    题目链接 思路 首先以那个环为框架,把所有的边连出来.如果有两条边相交,那么就把其中一条放到环外面去. 如图: \((1,3)\)与\((2,5)相交,\)(1,4)\(与\)(2,5)相交.所以我们 ...

  10. BZOJ1997 平面图判定 平面图性质 2-sat

    相交的两条边不能在同一侧,用2-sat即可. 平面图点数-边数关系 \(E\le 3V-6\) 写这篇文章我只是想说明,知乎一小时,题解一分钟. lb Zhihu, gos langar Qarwet ...

随机推荐

  1. Safari中的input、textarea无法输入的问题

    原因是这两种表单元素上应用了user-select:none的css属性.一般没人刻意这么做,可能是这样的情况: * { user-select: none; } 在css中排除掉这两种元素就好了: ...

  2. sublime 安装插件报错

    sublime  安装插件报错,大部分原因是本地防火墙开启了,关闭本地防火墙

  3. Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work...

    在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从mysql uuid相同, Slave_IO无法启动,报错如下: The slave I/O thread stops bec ...

  4. 20145328 《Java程序设计》实验三实验报告

    20145328 <Java程序设计>实验三实验报告 实验名称 Java敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 敏捷开发是一种以人为 ...

  5. 收藏 19 个 ES6常用的简写技巧

    代码精炼是每个有追求的程序所向往的,本文总结了19个JavaScript的简写技术,其中包括三元操作符.短路求值简写方式.声明变量简写方法等等,还有些自己的理解加上去:希望对你有帮助. 三元操作符 当 ...

  6. 起源游戏临时实体(Temp Entity)

    如何查看实体 https://wiki.alliedmods.net/Temp_Entity_Lists_(Source) 这里是部分游戏的临时实体列表 # 还可以通过在游戏内输入来获取游戏的临时实体 ...

  7. [洛谷P4886]快递员

    题目大意:一个$n$个点的树,树上有$m$个点对$(a,b)$,找到一个点$x$,使得$max(dis(x,a_i)+dis(x,b_i))$最小 如果做过幻想乡的战略游戏这道题,应该这道题的思路一眼 ...

  8. OAuth Implementation for ASP.NET Web API using Microsoft Owin.

    http://blog.geveo.com/OAuth-Implementation-for-WebAPI2 OAuth is an open standard for token based aut ...

  9. 跟着我一起学习大数据——Hadoop

    hadoop配置文件:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.9.0/ 一:Hadoop简介 总结下起源于Nutch项目,社区 ...

  10. POJ - 3169 差分约束

    题意:n头牛,按照编号从左到右排列,两头牛可能在一起,接着有一些关系表示第a头牛与第b头牛相隔最多与最少的距离,最后求出第一头牛与最后一头牛的最大距离是多少,如         果最大距离无限大则输出 ...