思路:

我们可以搞一棵线段树

对于一段区间有6种情况需要讨论

左上右下、左上右上、左下右下、左下右上

这四种比较好维护

用左上右下举个例子吧

就是左儿子的左上右下&左区间到右区间下面有路&右儿子的左下右下

或者是左儿子的左上右上&左区间到右区间上面有路&右儿子的左上右下

还有两种  区间的左(右)端点上下能不能联通 需要维护

这种就是左儿子的上下连通或(左上右上&左上右下&左到右两条路都联通&右儿子的上下联通)

(假设c1<c2)

最后要查的是 1->c1 (可以1~c1上下联通再c1[!r1]->c2)

c1->c2(直接联通当然最好)

c2->cn

还有一种是1~c1上下联通&c2~n上下联通&c1[!r1]与c2[!r2]上下联通

4种分类讨论即可

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
int map[N][],map2[N],n,r1,c1,r2,c2,jy;
char op[];
struct Node{bool b[][],c[];}tree[N*];
Node push_up(Node L,Node R,int mid){
Node tmp;
tmp.b[][]=(L.b[][]&map[mid][]&R.b[][])|(L.b[][]&map[mid][]&R.b[][]);
tmp.b[][]=(L.b[][]&map[mid][]&R.b[][])|(L.b[][]&map[mid][]&R.b[][]);
tmp.b[][]=(L.b[][]&map[mid][]&R.b[][])|(L.b[][]&map[mid][]&R.b[][]);
tmp.b[][]=(L.b[][]&map[mid][]&R.b[][])|(L.b[][]&map[mid][]&R.b[][]);
tmp.c[]=L.c[]|(L.b[][]&map[mid][]&map[mid][]&L.b[][]&R.c[]);
tmp.c[]=R.c[]|(R.b[][]&map[mid][]&map[mid][]&R.b[][]&L.c[]);
return tmp;
}
void build(int l,int r,int pos){
if(l==r){tree[pos].b[][]=tree[pos].b[][]=;return;}
int mid=(l+r)>>,lson=pos<<,rson=pos<<|;
build(l,mid,lson),build(mid+,r,rson);
}
void insert(int l,int r,int pos,int L,int num,bool v){
if(l==r){
if(num==)tree[pos].b[][]=tree[pos].b[][]=tree[pos].c[]=tree[pos].c[]=map2[l]=v;
else map[l][num]=v;return;
}
int mid=(l+r)>>,lson=pos<<,rson=pos<<|;
if(mid<L)insert(mid+,r,rson,L,num,v);
else insert(l,mid,lson,L,num,v);
tree[pos]=push_up(tree[lson],tree[rson],mid);
}
Node query(int l,int r,int pos,int L,int R){
if(l>=L&&r<=R)return tree[pos];
int mid=(l+r)>>,lson=pos<<,rson=pos<<|;
if(mid<L)return query(mid+,r,rson,L,R);
else if(mid>=R)return query(l,mid,lson,L,R);
else return push_up(query(l,mid,lson,L,R),query(mid+,r,rson,L,R),mid);
}
int main(){
scanf("%d",&n),build(,n,);
while(scanf("%s",op)&&op[]!='E'){
scanf("%d%d%d%d",&r1,&c1,&r2,&c2),r1--,r2--;
if(c1>c2)swap(c1,c2),swap(r1,r2);
if(op[]=='A'){
Node a=query(,n,,,c1),b=query(,n,,c2,n),c=query(,n,,c1,c2);
if(c.b[r1][r2]|(a.c[]&c.b[!r1][r2])|(b.c[]&c.b[r1][!r2])|(b.c[]&a.c[]&c.b[!r1][!r2]))puts("Y");
else puts("N");
}
else{
if(r1==r2)jy=(r1==);
else jy=;
insert(,n,,c1,jy,op[]=='O');
}
}
}

BZOJ 1018 线段树维护图的连通性问题的更多相关文章

  1. BZOJ 1018 线段树维护图连通性

    用8个bool维护即可分别为LURU,LURD,LDRU,LDRD,LULD,RURD,Side[1],Side[2]即可. Side表示这一块有没有接到右边.Merge一下就可以了.码农题,WA了一 ...

  2. bzoj 1018 线段树维护连通性

    本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...

  3. BZOJ 2124 线段树维护hash值

    思路: http://blog.csdn.net/wzq_QwQ/article/details/47152909 (代码也是抄的他的) 自己写得垃圾线段树怎么都过不了 隔了两个月 再写 再挂 又隔了 ...

  4. bzoj 4127 线段树维护绝对值之和

    因为d>=0,所以一个位置的数只会单调不降并且只会有一次穿过0. 用这个性质,我们我可在线段树中记录正数负数的个数和和,以及最大的负数以及答案. 修改操作:如果当前最大负数+d<=0,那么 ...

  5. BZOJ.1018.[SHOI2008]堵塞的交通(线段树维护连通性)

    题目链接 只有两行,可能的路径数不多,考虑用线段树维护各种路径的连通性. 每个节点记录luru(left_up->right_up),lurd,ldru,ldrd,luld,rurd,表示这个区 ...

  6. [BZOJ 3995] [SDOI2015] 道路修建 【线段树维护连通性】

    题目链接:BZOJ - 3995 题目分析 这道题..是我悲伤的回忆.. 线段树维护连通性,与 BZOJ-1018 类似,然而我省选之前并没有做过  1018,即使它在 ProblemSet 的第一页 ...

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

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

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

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

  9. BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)

    BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...

随机推荐

  1. 三维重建5:场景中语义分析/语义SLAM/DCNN-大尺度SLAM

    前言: 在实时/非实时大规模三维场景重建中,引入了语义SLAM这个概念,参考三维重建:SLAM的尺度和方法论问题和三维重建:SLAM的粒度和工程化问题 .大规模三维场景重建的尺度增大,因此相对于整个重 ...

  2. EnforceLearning-被动强化学习

    前言: 画图挺好:深度学习进阶之路-从迁移学习到强化学习 专家系统给出了知识节点和规则,使用粒度描述准确性,依靠分解粒度解决矛盾,并反馈知识和推理规则更新.专家系统与机器学习有本质区别,但从机器学习的 ...

  3. 【sqli-labs】 less33 GET- Bypass AddSlashes (GET型绕过addslashes() 函数的宽字节注入)

    和less32一样,对关键字符进行了添加\ 关于addslashes()函数 payload和less32一样 http://192.168.136.128/sqli-labs-master/Less ...

  4. 【sqli-labs】 less7 GET - Dump into outfile - String (导出文件GET字符型注入)

    使用此漏洞需要知道WEB程序的根路径并且MYSQL的secure-file-priv配置应为可写入该路径 添加单引号,发现错误被屏蔽 对应的SQL语句应为 ')) ... 字段还是3个 在数据库中执行 ...

  5. day34-3 类和对象小知识

    目录 属性查找顺序 类与对象的绑定方法 类与数据类型 对象的高度整合 属性查找顺序 属性查找顺序:先从对象自身查找,对象没有就去类中查找,类中没有则报错 class Student: name = ' ...

  6. PAT_A1137#Final Grading

    Source: PAT A1137 Final Grading (25 分) Description: For a student taking the online course "Dat ...

  7. PAT_A1111#Online Map

    Source: PAT A1111 Online Map (30 分) Description: Input our current position and a destination, an on ...

  8. [Kernel参数]----/etc/sysctl.conf

    修改sysctl方法 方法一:修改/proc下内核参数文件内容 直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward.用下面命令查看i ...

  9. php第五节课

    封装 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  10. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...