[SHOI2008]堵塞的交通
Description
有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可
以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个
城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通,
直到拥堵解决,道路才会恢复畅通。初来咋到的你决心毛遂自荐到交通部某份差事,部长听说你来自一个科技高度
发达的世界,喜出望外地要求你编写一个查询应答系统,以挽救已经病入膏肓的小人国交通系统。 小人国的交通
部将提供一些交通信息给你,你的任务是根据当前的交通情况回答查询的问题。交通信息可以分为以下几种格式:
Close r1 c1 r2 c2:相邻的两座城市(r1,c1)和(r2,c2)之间的道路被堵塞了;Open r1 c1 r2 c2:相邻的两座城
市(r1,c1)和(r2,c2)之间的道路被疏通了;Ask r1 c1 r2 c2:询问城市(r1,c1)和(r2,c2)是否连通。如果存在一
条路径使得这两条城市连通,则返回Y,否则返回N;
Input
第一行只有一个整数C,表示网格的列数。接下来若干行,每行为一条交通信息,以单独的一行“Exit”作为
结束。我们假设在一开始所有的道路都是堵塞的。我们保证 C小于等于100000,信息条数小于等于100000。
Output
对于每个查询,输出一个“Y”或“N”。
Sample Input
Open 1 1 1 2
Open 1 2 2 2
Ask 1 1 2 2
Ask 2 1 2 2
Exit
Sample Output
N


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct Data
{
bool luru,lurd,luld,ldru,ldrd,rurd;
}c[];
bool ru[],rd[];
int n;
char s[];
Data merge(Data dl,Data dr,int mid)
{
Data dm;
dm.luru=(dl.luru&ru[mid]&dr.luru)||(dl.lurd&rd[mid]&dr.ldru);
dm.lurd=(dl.luru&ru[mid]&dr.lurd)||(dl.lurd&rd[mid]&dr.ldrd);
dm.luld=(dl.luld)||(ru[mid]&&rd[mid]&&dl.luru&&dl.ldrd&&dr.luld);
dm.ldru=(dl.ldru&&ru[mid]&&dr.luru)||(dl.ldrd&&rd[mid]&&dr.ldru);
dm.ldrd=(dl.ldrd&&rd[mid]&&dr.ldrd)||(dl.ldru&&ru[mid]&&dr.lurd);
dm.rurd=(dr.rurd)||(ru[mid]&&rd[mid]&&dr.luru&&dr.ldrd&&dl.rurd);
return dm;
}
void update1(int rt,int l,int r,int x,bool up,bool k)
{
if (l==r)
{
if (up) ru[x]=k;
else rd[x]=k;
return;
}
int mid=(l+r)>>;
if (x<=mid) update1(rt<<,l,mid,x,up,k);
else update1(rt<<|,mid+,r,x,up,k);
c[rt]=merge(c[rt<<],c[rt<<|],mid);
}
void update2(int rt,int l,int r,int x,bool k)
{
if (l==r)
{
c[rt].luld=c[rt].rurd=c[rt].lurd=c[rt].ldru=k;
return;
}
int mid=(l+r)>>;
if (x<=mid) update2(rt<<,l,mid,x,k);
else update2(rt<<|,mid+,r,x,k);
c[rt]=merge(c[rt<<],c[rt<<|],mid);
}
Data query(int rt,int l,int r,int L,int R)
{
if (l==L&&r==R)
{
return c[rt];
}
int mid=(l+r)>>;
if (L>mid) return query(rt<<|,mid+,r,L,R);
else if (R<=mid) return query(rt<<,l,mid,L,R);
else
{
return merge(query(rt<<,l,mid,L,mid),query(rt<<|,mid+,r,mid+,R),mid);
}
}
void build(int rt,int l,int r)
{
if (l==r)
{
c[rt].luru=;c[rt].ldrd=;
return;
}
int mid=(l+r)>>;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
}
int main()
{int i,r1,r2,c1,c2;
cin>>n;
build(,,n);
for (i=;i<n;i++)
ru[i]=rd[i]=;
while ()
{
scanf("%s",s);
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
if (c1>c2) swap(c1,c2),swap(r1,r2);
if (s[]=='E') break;
if (s[]=='O')
{
if (r1==r2)
update1(,,n,c1,r1==,);
else update2(,,n,c2,);
}
else if (s[]=='C')
{
if (r1==r2)
update1(,,n,c1,r1==,);
else update2(,,n,c2,);
}
else
{
Data dm=query(,,n,c1,c2),dl=query(,,n,,c1),dr=query(,,n,c2,n);
if (r1==&&r2==)
{
bool b1=dm.luru;
bool b2=dl.rurd&dm.ldru;
bool b3=dm.lurd&dr.luld;
bool b4=dl.rurd&dm.ldrd&dr.luld;
if (b1||b2||b3||b4) printf("Y\n");
else printf("N\n");
}
else if (r1==&&r2==)
{
bool b1=dm.ldrd;
bool b2=dl.rurd&dm.lurd;
bool b3=dm.ldru&dr.luld;
bool b4=dl.rurd&dm.luru&dr.luld;
if (b1||b2||b3||b4) printf("Y\n");
else printf("N\n");
}
else if (r1==&&r2==)
{
bool b1=dm.lurd;
bool b2=dl.rurd&dm.ldrd;
bool b3=dm.luru&dr.luld;
bool b4=dl.rurd&dm.ldru&dr.luld;
if (b1||b2||b3||b4) printf("Y\n");
else printf("N\n");
}
else if (r1==&&r2==)
{
bool b1=dm.ldru;
bool b2=dl.rurd&dm.luru;
bool b3=dm.ldrd&dr.luld;
bool b4=dl.rurd&dm.lurd&dr.luld;
if (b1||b2||b3||b4) printf("Y\n");
else printf("N\n");
}
}
}
}
[SHOI2008]堵塞的交通的更多相关文章
- 数据结构(线段树):BZOJ 1018: [SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2638 Solved: 864 Descri ...
- BZOJ 1018 [SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2247 Solved: 706[Submit ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic [线段树 区间信息]
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3064 Solved: 1027[Submi ...
- bzoj千题计划108:bzoj1018: [SHOI2008]堵塞的交通traffic
http://www.lydsy.com/JudgeOnline/problem.php?id=1018 关键点在于只有两行 所以一个2*m矩形连通情况只有6种 编号即对应代码中的a数组 线段树维护 ...
- 【BZOJ1018】[SHOI2008]堵塞的交通
[BZOJ1018][SHOI2008]堵塞的交通 题面 bzoj 洛谷 洛谷 题解 菊队讲要用线段树维护连通性,但是好像没人写 解法一 将所有的加边删边离线,然后以最近删除时间为边权,$LCT$维护 ...
- 1018: [SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic 链接 分析: 用线段树维护区间的四个端点的联通情况,然后查询的时候,把所有覆盖到的区间合并起来即可. 六种情况左上到右上(左边到右边的情况)… ...
- 【bzoj1018】[SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2887 Solved: 954[Submit ...
- [BZOJ1018][SHOI2008]堵塞的交通traffic 线段树维护连通性
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MB Submit: 3795 Solved: 1253 [Sub ...
- 【BZOJ1018】[SHOI2008]堵塞的交通traffic 线段树
[BZOJ1018][SHOI2008]堵塞的交通traffic Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可以被看成是一个 ...
- [bzoj1018][SHOI2008]堵塞的交通traffic_线段树
bzoj-1018 SHOI-2008 堵塞的交通traffic 参考博客:https://www.cnblogs.com/MashiroSky/p/5973686.html 题目大意:有一天,由于某 ...
随机推荐
- 微信APP简要分析
Part1 走进微信APP 很明显,微信是很成功的APP. 微信 (WeChat) 是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,现已是超过九亿人使用的手机应用. ...
- 安装iis8
-------------------- @echo off echo 正在添加IIS8.0 功能,依据不同的网络速率,全程大约需要5分钟时间... start /w pkgmgr / ...
- android 广播,manifest.xml注册,代码编写
1.种 private void downloadBr(File file) { // 广播出去,由广播接收器来处理下载完成的文件 Intent sendIntent = new Intent ...
- verilog学习笔记(4)_有限状态机
有限状态机: 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路: - 其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态: - 究竟转 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
(1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...
- 亚马逊AWS学习——VPC里面几个概念的关系
VPC中涉及几个概念: VPC 子网 路由表 Internet网关 安全组 今天来讲讲这几个概念之间的关系. 1. VPC 说的就是VPC,当然VPC范围是最大的,VPC即virtual privat ...
- [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法
博客首页:http://www.cnblogs.com/kezhuang/p/ 本篇文章来分析一下WindowManager的后续工作,也就是ViewRootImpl的setView函数的工作 /i* ...
- (function(root,factory){})(this,function($){}) 一个立即执行的匿名函数自调
因为新公司用到ocx 我就开始看原来的代码 无意中发现这个 可能原来比较low吗(虽然现在也很low吧)没发现这个东东 还可以这样写 于是乎我开始了探索 完整代码如下 HTML <div id= ...
- rsync 自动创建目录的坑点
rsync同步文件有三种模式: 1.把源站路径下某个文件,同步到目标路径.例如rsync -aR /data/1/2/3/a.txt 1.1.1.1:/data/ ,目标机器将自动创建多层目录存放a. ...
- Hadoop学习笔记一(HDFS架构)
介绍 Hadoop分布式文件系统(HDFS)设计的运行环境是商用的硬件系统.他和现存的其他分布式文件系统存在很多相似点.不过HDFS和其他分布式文件系统的区别才是他的最大亮点,HDFS具有高容错的特性 ...