题意:一个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. java基础—泛型

    一.体验泛型 JDK1.5之前的集合类中存在的问题——可以往集合中加入任意类型的对象,例如下面代码: 1 package cn.gacl.generic.summary; 2 3 import jav ...

  2. iOS 资源大全整理

    这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...

  3. c内置数据类型

    参考 C与指针 第三章 类型 类型标识符 字节 表示数值范围 备注 整型 [signed] int 2* -32768~32767 -2^15 ~ (2^15 -1) 无符号整型 unsigned [ ...

  4. 洛谷 P1593 因子和

    https://www.luogu.org/problemnew/show/P1593#sub 利用约数和定理:可以去看一下公式第13条 然后这个题目的话,要求$a^b$,那么我们首先可以先将a分解然 ...

  5. [BZOJ] 1563: [NOI2009]诗人小G

    1D/1D的方程,代价函数是一个p次函数,典型的决策单调性 用单调队列(其实算单调栈)维护决策点,优化转移 复杂度\(O(nlogn)\) #include<iostream> #incl ...

  6. intellij idea 下载安装破解教程

    官网下载:http://www.jetbrains.com/idea/download/#section=windows 选择  Ultimate 版本下载 下载完成后,打开安装 在安装路径位置,可以 ...

  7. 201621123080 《Java程序设计》第13周学习总结

    201621123080 <Java程序设计>第13周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能( ...

  8. 201621123080《JAVA程序设计》第八周学习总结

    作业08-集合 1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 根据代码,首先在源数组里找到下标,若下标符合>=0 ...

  9. LeetCode之Weekly Contest 101

    前一段时间比较忙,而且做这个对于我来说挺耗时间的,已经间隔了几期的没做总结了,后面有机会补齐.而且本来做这个的目的就是为了防止长时间不做把编程拉下,不在追求独立作出所有题了.以后完赛后稍微尝试下,做不 ...

  10. thinkphp5开发restful-api接口 学习笔记一

    视频学习地址: http://study.163.com/course/courseMain.htm?courseId=1004171002 源码和文档(如果满意,欢迎 star): https:// ...