题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1018

用线段树维护区间连通性,对于每一个区间记录6个域表示(左上,左下)(左上,右上)(右上,右下)(左下,右下)(左上,右下)(左下,右上)的连通情况。

因为是与相邻点的关系所以维护一个数组表示当前列x与列x+1的连边情况和当前列x的第一行与第二行的连边情况。

然后就是区间合并。。各种分类讨论。。

  1. #include<cstring>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<queue>
  6. #include<map>
  7. #include<vector>
  8. #define rep(i,l,r) for (int i=l;i<=r;i++)
  9. #define down(i,l,r) for (int i=l;i>=r;i--)
  10. #define clr(x,y) memset(x,y,sizeof(x))
  11. #define ll long long
  12. #define maxn 100500
  13. #define mm 998244353
  14. using namespace std;
  15. struct data{int b[],l,r;
  16. }t[maxn*];
  17. int road[maxn][],n;
  18. char s[];
  19. int read(){
  20. int x=,f=; char ch=getchar();
  21. while (!isdigit(ch)){if (ch=='-') f=-; ch=getchar();}
  22. while (isdigit(ch)){x=x*+ch-''; ch=getchar();}
  23. return x*f;
  24. }
  25. data M(data l,data r){
  26. data i;
  27. i.l=l.l; i.r=r.r;
  28. i.b[]=(l.b[])||( ( (l.b[]&&l.b[]) || (l.b[]&&l.b[]) )&&(road[l.r][])&&(road[l.r][])&&(r.b[]));
  29. i.b[]=(r.b[])||( ( (r.b[]&&r.b[]) || (r.b[]&&r.b[]) )&&(road[l.r][])&&(road[l.r][])&&(l.b[]));
  30. i.b[]=(l.b[]&&r.b[]&&road[l.r][]) || (l.b[]&&r.b[]&&road[l.r][]);
  31. i.b[]=(l.b[]&&r.b[]&&road[l.r][]) || (l.b[]&&r.b[]&&road[l.r][]);
  32. i.b[]=(l.b[]&&r.b[]&&road[l.r][]) || (l.b[]&&r.b[]&&road[l.r][]);
  33. i.b[]=(l.b[]&&r.b[]&&road[l.r][]) || (l.b[]&&r.b[]&&road[l.r][]);
  34. return i;
  35. }
  36. void build(int i,int l,int r){
  37. t[i].l=l; t[i].r=r; int mid=(l+r)/;
  38. if (l==r){ t[i].b[]=t[i].b[]=; return; }
  39. build(i*,l,mid); build(i*+,mid+,r);
  40. t[i]=M(t[i*],t[i*+]);
  41. }
  42. void change(int pos,int i){
  43. int l=t[i].l,r=t[i].r,mid=(l+r)/;
  44. if (l==r){
  45. rep(j,,) t[i].b[j]=road[l][];
  46. t[i].b[]=t[i].b[]=;
  47. return;
  48. }
  49. if (pos<=mid) change(pos,i*); else change(pos,i*+);
  50. t[i]=M(t[i*],t[i*+]);
  51. }
  52. void change(int x0,int y0,int x1,int y1,int flag){
  53. if (y0>y1) swap(x0,x1),swap(y0,y1);
  54. if (x0==x1) {
  55. if (x0==) road[y0][]=flag; else road[y0][]=flag;
  56. } else road[y0][]=flag;
  57. change(y0,);
  58. }
  59. data ask(int i,int tl,int tr){
  60. int l=t[i].l,r=t[i].r,mid=(l+r)/;
  61. if (l==tl&&r==tr) return t[i];
  62. if (tr<=mid) return ask(i*,tl,tr);
  63. else if (tl>mid) return ask(i*+,tl,tr);
  64. else return M(ask(i*,tl,mid),ask(i*+,mid+,tr));
  65. }
  66. bool query(int x0,int y0,int x1,int y1){
  67. if (y0>y1) swap(x0,x1),swap(y0,y1);
  68. data x=ask(,,y0),y=ask(,y0,y1),z=ask(,y1,n);
  69. if (x0==x1) {
  70. if (x0==){
  71. if (y.b[]) return ;
  72. if ((x.b[]||y.b[])&&(y.b[]||z.b[])&&y.b[]) return ;
  73. if ((y.b[])&&(y.b[]||z.b[])) return ;
  74. if ((y.b[])&&(x.b[]||y.b[])) return ;
  75. return ;
  76. }
  77. else {
  78. if (y.b[]) return ;
  79. if ((x.b[]||y.b[])&&(y.b[]||z.b[])&&y.b[]) return ;
  80. if ((y.b[])&&(y.b[]||z.b[])) return ;
  81. if ((y.b[])&&(x.b[]||y.b[])) return ;
  82. return ;
  83. }
  84. }
  85. else {
  86. if (x0==){
  87. if (y.b[]) return ;
  88. if ((x.b[]||y.b[])&&y.b[]) return ;
  89. if ((x.b[]||y.b[])&&(y.b[]||z.b[])&&y.b[]) return ;
  90. if ((y.b[]||z.b[])&&y.b[]) return ;
  91. return ;
  92. }
  93. else {
  94. if (y.b[]) return ;
  95. if ((x.b[]||y.b[])&&y.b[]) return ;
  96. if ((x.b[]||y.b[])&&(y.b[]||z.b[])&&y.b[]) return ;
  97. if ((y.b[]||z.b[])&&y.b[]) return ;
  98. return ;
  99. }
  100. }
  101.  
  102. }
  103. int main(){
  104. n=read();
  105. build(,,n);
  106. int x0,x1,y0,y1;
  107. while (){
  108. scanf("%s",s);
  109. if (s[]=='E') break;
  110. x0=read(); y0=read(); x1=read(); y1=read();
  111. if (s[]=='O') change(x0,y0,x1,y1,);
  112. else if (s[]=='C') change(x0,y0,x1,y1,);
  113. else printf("%c\n",query(x0,y0,x1,y1)?'Y':'N');
  114. }
  115. return ;
  116. }

BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树)的更多相关文章

  1. BZOJ 1018: [SHOI2008]堵塞的交通traffic [线段树 区间信息]

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3064  Solved: 1027[Submi ...

  2. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  3. 数据结构(线段树):BZOJ 1018: [SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2638  Solved: 864 Descri ...

  4. BZOJ 1018 [SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2247  Solved: 706[Submit ...

  5. [BZOJ1018][SHOI2008]堵塞的交通traffic 线段树维护连通性

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 3795  Solved: 1253 [Sub ...

  6. 【BZOJ1018】[SHOI2008]堵塞的交通traffic 线段树

    [BZOJ1018][SHOI2008]堵塞的交通traffic Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个 ...

  7. [BZOJ 1018] [SHOI2008] 堵塞的交通traffic 【线段树维护联通性】

    题目链接:BZOJ - 1018 题目分析 这道题就说明了刷题少,比赛就容易跪..SDOI Round1 Day2 T3 就是与这道题类似的..然而我并没有做过这道题.. 这道题是线段树维护联通性的经 ...

  8. 【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树区间合并+STL-set

    题目描述 给出一张2*n的网格图,初始每条边都是不连通的.多次改变一条边的连通性或询问两个点是否连通. 输入 第一行只有一个整数C,表示网格的列数.接下来若干行,每行为一条交通信息,以单独的一行“Ex ...

  9. bzoj1018[SHOI2008]堵塞的交通traffic——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1018 巧妙的线段树.维护矩阵四个角的连通性. 考虑两个点连通的可能路径分成3部分:两点左边. ...

随机推荐

  1. iOS 工程默认只允许竖屏,在单独界面进行横竖转换,屏幕旋转

    只含有 .关于横竖屏的代码 #import "InspectionReportViewController.h" #define SCREEN_WIDTH ([UIScreen m ...

  2. HttpClient4.5 post请求xml到服务器

    1.加入HttpClient4.5和junit依赖包 <dependencies> <dependency> <groupId>org.apache.httpcom ...

  3. ArcGIS API for JavaScript 4.2学习笔记[6] goTo()地图动画

    这是个很有意思的例子,不过例子给的比较复杂,需要查很多API,我会在文章最后给出关键的类和属性解释. 同样发现一个很有意思的事儿:博客园似乎有爬虫,我4号发布的blogs,5号就在百度和google搜 ...

  4. NOI2001 炮兵阵地

    一道非常有意思的题目 很久之前考过 但那时候好像只会打裸搜索(捂脸跑 后来看题解的时候也是没有学状压的所以算是闲置了很久没动的题 昨天看到的时候第一反应是m<=10所以压m然后跑1-n枚举每一行 ...

  5. iOS XIB等比例适配

    选择两个视图使其等宽高,再去约束里面就可以设置乘数因子. 简单的一个例子: 要求:设置白色视图的宽度为蓝色视图的一半 1.点击白色视图连线到父视图,选择 Equal Widths     2.选择右边 ...

  6. Siamese Network理解

    提起siamese network一般都会引用这两篇文章: <Learning a similarity metric discriminatively, with application to ...

  7. 《Create Your own PHP Framework》笔记

    前言 大力推荐该教程:<Create Your own PHP Framework> Symfony的学习蛮累的,官方文档虽然很丰富,但是组织方式像参考书而不是指南,一些不错的指导性文档常 ...

  8. linux下配置Tomcat开机启动

    我们在linux下安装好tomcat之后:经常是需要配置到开机启动的: 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在ce ...

  9. js间隔几秒弹出一次联系框

    运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-3-sec-alert-dlg-codes/ 具体代码如下: <html> < ...

  10. [编织消息框架][网络IO模型]Netty Reactor

    严格来讲Netty Reactor是一种设计模式,一听模式两字就知道了吧,套路哈哈 Reactor中文译为“反应堆”. 看图netty处理流程 1.netty server 至少有两组reactor. ...