题意:一个2行C列的矩形网格图,网格上的每个点代表一个城市,相邻的城市之间有一条道路

一开始每条道路都是堵塞的,堵塞即为不可经过。经过一些操作后,可能某些道路通畅了,也可能某些道路堵塞了

多次询问,询问两个城市是否联通

C,q<=1e5

思路:From https://www.cnblogs.com/MashiroSky/p/5973686.html

 #include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 110000
#define M 41
#define eps 1e-8
#define pi acos(-1) struct node
{
int U,D,l,r,u,d,p,q;
}t[N<<];
int n;
char s[]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} void pushup(node &p,node l,node r)
{
p.l=l.l|(l.u&p.U&r.l&p.D&l.d);
p.r=r.r|(r.u&p.U&l.r&p.D&r.d);
p.u=(l.u&p.U&r.u)|(l.q&p.D&r.p);
p.d=(l.d&p.D&r.d)|(l.p&p.U&r.q);
p.q=(l.u&p.U&r.q)|(l.q&p.D&r.d);
p.p=(l.d&p.D&r.p)|(l.p&p.U&r.u);
} void build(int l,int r,int p)
{
if(l==r)
{
t[p].U=t[p].D=t[p].u=t[p].d=;
return;
}
int mid=(l+r)>>;
build(l,mid,p<<);
build(mid+,r,p<<|);
} void updater(int l,int r,int x,int y,int v,int p)
{
int mid=(l+r)>>;
if(x==mid)
{
if(y==) t[p].U=v;
else t[p].D=v;
pushup(t[p],t[p<<],t[p<<|]);
return;
}
if(x<=mid) updater(l,mid,x,y,v,p<<);
else updater(mid+,r,x,y,v,p<<|);
pushup(t[p],t[p<<],t[p<<|]);
} void updatec(int l,int r,int x,int v,int p)
{
int mid=(l+r)>>;
if(l==r)
{
t[p].l=t[p].r=t[p].p=t[p].q=v;
return;
}
if(x<=mid) updatec(l,mid,x,v,p<<);
else updatec(mid+,r,x,v,p<<|);
pushup(t[p],t[p<<],t[p<<|]);
} node query(int l,int r,int x,int y,int p)
{
int mid=(l+r)>>;
if(x<=l&&r<=y) return t[p];
if(y<=mid) return query(l,mid,x,y,p<<);
else if(x>mid) return query(mid+,r,x,y,p<<|);
else
{
node tmp=t[p];
pushup(tmp,query(l,mid,x,y,p<<),query(mid+,r,x,y,p<<|));
return tmp;
}
} int main()
{
freopen("bzoj1018.in","r",stdin);
freopen("bzoj1018.out","w",stdout);
scanf("%d",&n);
build(,n,);
int r1,r2,c1,c2;
while(scanf("%s",s)!=EOF)
{
if(s[]=='E') break;
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
if(c1>c2)
{
swap(c1,c2);
swap(r1,r2);
}
if(s[]=='O')
{
if(r1==r2) updater(,n,c1,r1,,);
else updatec(,n,c1,,);
}
if(s[]=='C')
{
if(r1==r2) updater(,n,c1,r1,,);
else updatec(,n,c1,,);
}
if(s[]=='A')
{
node l=query(,n,,c1,),
x=query(,n,c1,c2,),
r=query(,n,c2,n,);
int ans; if(r1==&&r2==)
ans=x.u|(l.r&x.p)|(x.q&r.l)|(l.r&x.d&r.l); if(r1==&&r2==)
ans=x.q|(l.r&x.d)|(x.u&r.l)|(l.r&x.p&r.l); if(r1==&&r2==)
ans=x.p|(l.r&x.u)|(x.d&r.l)|(l.r&x.q&r.l); if(r1==&&r2==)
ans=x.d|(l.r&x.q)|(x.p&r.l)|(l.r&x.u&r.l);
if(ans) printf("Y\n");
else printf("N\n");
}
}
return ;
}

【BZOJ1018】堵塞的交通traffic(线段树,网格图,连通性)的更多相关文章

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

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

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

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

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

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

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

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

  5. Bzoj1018[SHOI2008]堵塞的交通traffic(线段树)

    这题需要维护连通性,看到有连接删除,很容易直接就想LCT了.然而这题点数20w操作10w,LCT卡常估计过不去.看到这个东西只有两行,考虑能否用魔改后的线性数据结构去维护.我想到了线段树. 考虑如果两 ...

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

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

  7. BZOJ 1018 堵塞的交通traffic(线段树)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1018 题意:一个2*n的格子,相邻格子之间有一条道路.初始时道路是不通的. 三种操作:( ...

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

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

  9. 【BZOJ1018】堵塞的交通(线段树)

    [BZOJ1018]堵塞的交通(线段树) 题面 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网 ...

  10. [bzoj1018][SHOI2008]堵塞的交通traffic_线段树

    bzoj-1018 SHOI-2008 堵塞的交通traffic 参考博客:https://www.cnblogs.com/MashiroSky/p/5973686.html 题目大意:有一天,由于某 ...

随机推荐

  1. PAT (Basic Level) Practise (中文)- 1012. 数字分类 (20)

    http://www.patest.cn/contests/pat-b-practise/1012 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数 ...

  2. jqury点击返回顶部代码

    效果请看右下角:代码如下: <div class="totop"><img src="https://www.cnblogs.com/images/cn ...

  3. const,static,extern,#define

    一.const // 简单定义变量,可以修改变量的值 ; a = ; // const的用法 // 用法一: ; ; // 不允许修改,因为 const 修饰 b/c,指定 b/c 为常量!! // ...

  4. B1002 写出这个数

    读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...

  5. Spring Security和Shiro的比较和使用

    https://blog.csdn.net/it_java_shuai/article/details/78054951 Spring Security和Shiro的比较和使用 2017年09月21日 ...

  6. destoon去除编辑器替换图片删除原图功能,删除信息删除相关图片功能

    去除这些功能会造成大量垃圾图片,但是客户存在大量复制内容,其中图片一样,为了防止客户替换其中一个图片或者删除信息 造成其他复制信息图片丢失 去除文章模型级联图片功能. 对应模块class.php se ...

  7. jquery图片切换插件jquery.cycle.js参数详解

    转自:国人的力量 blog.163.com/xz551@126/blog/static/821257972012101541835491/ 自从使用了jquery.cycle.js,我觉得再也不用自己 ...

  8. 面向对象之元类(metaclass)

    一.前言: 要搞懂元类必须要搞清楚下面几件事: 类创建的时候,内部过程是什么样的,也就是我们定义类class 类名()的过程底层都干了些啥 类的调用即类的实例化过程的了解与分析 我们已经知道元类存在的 ...

  9. Primer C++第五版 读书笔记(一)

    Primer C++第五版 读书笔记(一) (如有侵权请通知本人,将第一时间删文) 1.1-2.2 章节 关于C++变量初始化: 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义 ...

  10. selenium2自动处理验证码

    最近在研究web自动化,登录时发现要输入验证码,之前在做手机app自动化时,就被验证码block了.这次做web时又遇到了,探索之后,发现有如下几个解决办法: 1.联系开发人员,让其帮忙在测试环境中注 ...