【BZOJ1018】堵塞的交通traffic(线段树,网格图,连通性)
题意:一个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(线段树,网格图,连通性)的更多相关文章
- 【BZOJ1018】[SHOI2008]堵塞的交通traffic 线段树
[BZOJ1018][SHOI2008]堵塞的交通traffic Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个 ...
- [BZOJ1018][SHOI2008]堵塞的交通traffic 线段树维护连通性
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MB Submit: 3795 Solved: 1253 [Sub ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic [线段树 区间信息]
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3064 Solved: 1027[Submi ...
- 【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树区间合并+STL-set
题目描述 给出一张2*n的网格图,初始每条边都是不连通的.多次改变一条边的连通性或询问两个点是否连通. 输入 第一行只有一个整数C,表示网格的列数.接下来若干行,每行为一条交通信息,以单独的一行“Ex ...
- Bzoj1018[SHOI2008]堵塞的交通traffic(线段树)
这题需要维护连通性,看到有连接删除,很容易直接就想LCT了.然而这题点数20w操作10w,LCT卡常估计过不去.看到这个东西只有两行,考虑能否用魔改后的线性数据结构去维护.我想到了线段树. 考虑如果两 ...
- bzoj1018[SHOI2008]堵塞的交通traffic——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1018 巧妙的线段树.维护矩阵四个角的连通性. 考虑两个点连通的可能路径分成3部分:两点左边. ...
- BZOJ 1018 堵塞的交通traffic(线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1018 题意:一个2*n的格子,相邻格子之间有一条道路.初始时道路是不通的. 三种操作:( ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)
传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...
- 【BZOJ1018】堵塞的交通(线段树)
[BZOJ1018]堵塞的交通(线段树) 题面 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网 ...
- [bzoj1018][SHOI2008]堵塞的交通traffic_线段树
bzoj-1018 SHOI-2008 堵塞的交通traffic 参考博客:https://www.cnblogs.com/MashiroSky/p/5973686.html 题目大意:有一天,由于某 ...
随机推荐
- Oracle 闪回 找回数据的实现方法
Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...
- mac 使用homebrew 安装mysql
1. 安装homebrew ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" brew update ...
- springBoot 集成swagger2.9.2
加依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependen ...
- React和Vue组件间数据传递demo
一.React (一)父组件向子组件传数据 简单的向下传递参数 /* Parent */ class App extends Component { render() { return ( <d ...
- destoon 屏蔽会员组,让个人,游客不显示
include/post.fun.php 文件的group_select函数增加 排除参数 except function group_select($name = 'groupid', $titl ...
- 解决linux不能解压rar格式压缩包
1download rarlinux-x64-5.3.0.tar.gz data package 2.tar xvf rarlinux-64-5.3.0.tar.gz 3. cd rar and th ...
- Linux 常用命令(三)
一.less --分页查看文件:方面查阅(编辑)大文件 说明:支持方向键盘和鼠标向上向下浏览 -N 显示行号 二.head --output the first part of files 默认显示 ...
- 【mysql】【windows】MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助。
成功安装以后,启动MySQL,输入: net start mysql 提示: ”MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助.” 查了下, ...
- Virtual Friends HDU - 3172 (并查集+秩+map)
These days, you can do all sorts of things online. For example, you can use various websites to make ...
- 如何用ADMINISTRATOR登陆WIN7
Windows 7系统出于安全考虑,将系统超级管理员帐户(Administrator)隐藏了,不允许"普通用户"使用.很多时候特别是安装一些应用软件时,由于兼容的问题,普通权限的用 ...