[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 题目大意:有一天,由于某 ...
随机推荐
- JavaScript(第九天)【正则表达式】
假设用户需要在HTML表单中填写姓名.地址.出生日期等.那么在将表单提交到服务器进一步处理前,JavaScript程序会检查表单以确认用户确实输入了信息并且这些信息是符合要求的. 一.什么是正则表 ...
- Ditto在教学上的应用
Ditto在教学上的应用 我喜欢iOS和macOS生态的一个原因是,你在iphone上看到一段好文字,复制一下,到macbook中粘贴一下就可以了,这体验太爽了. 大家可能相信大家都听过这样一则笑话: ...
- alpha-咸鱼冲刺day5
一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 !!!QAQ可以做到跟数据库交互了!!!!先来撒花花!(然后继续甲板) 四,问题困难 日常啥都不会,百度真心玩一年. 还得自学n ...
- 201621123050 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- Flask 学习 十四 测试
获取代码覆盖报告 安装代码覆盖工具 pip install coverage manage.py 覆盖检测 COV = None if os.environ.get('FLASK_COVERAGE') ...
- HttpWebRequest,HttpWebResponse C# 代码调用webservice,参数为xml
先上调用代码 public static string PostMoths(string url, string Json) { System.Net.HttpWebRequest request; ...
- SpringCloud的Hystrix(二) 某消费者应用(如:ui、网关)访问的多个微服务的断路监控
一.验证断路保护监控是否管理多个消费者 app 1.第1个消费者应用:访问自己封装rest服务 saleProd 2.第2个消费者应用:第二个应用没有反应 说明 1.每个应用实例的断路保护机制,只对本 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- GIT入门笔记(17)- 创建分支dev_lsq, 提交到代码
git服务器上默认的已经有主干和test分支. 开发人员提交代码流程如下: 1.用switch to->new branch创建dev1分支 2.push branch提交到dev1分支 3.在 ...
- 开源软件:NoSql数据库 - 图数据库 Neo4j
转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有 ...