1018: [SHOI2008]堵塞的交通traffic - BZOJ
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”作为结束。我们假设在一开始所有的道路都是堵塞的。 对30%测试数据,我们保证C小于等于1000,信息条数小于等于1000; 对100%测试数据,我们保证 C小于等于100000,信息条数小于等于100000。
Output
对于每个查询,输出一个“Y”或“N”。
Sample Input
2
Open 1 1 1 2
Open 1 2 2 2
Ask 1 1 2 2
Ask 2 1 2 2
Exit
Sample Output
Y
N
又见恶心题
用线段树维护这一个区间四个角的连通性,这个满足区间可加性
特殊情况:询问的两个点不一定是从中间联通,它可能从外面绕一个大弯子
所以还要检查一下(1,c1)和(c2,C)的连通性
今天上午终于准备写这道恶心题了,果然恶心
无语了....最后这个错误真奇葩,虽然已经是第二次了
因为这个字符串只有4种情况,很多人应该都是判三个然后最后一个放在最后那个else那里
可是我在最后在最后那个else那里加了一句if s='A' then就神奇的从WA变成了AC(这是什么奇葩原因啊)
type
aa=array[..]of boolean;
node=record
lson,rson,left,right:longint;
flag:aa;
end;
const
maxn=;
var
tree:array[..maxn*]of node;
n,tot,x1,y1,x2,y2,ll,rr:longint;
ans,save,k1,k2:aa;
s:char; procedure swap(var x,y:longint);
var
t:longint;
begin
t:=x;x:=y;y:=t;
end; procedure build(l,r:longint);
var
mid,now:longint;
begin
inc(tot);
now:=tot;
with tree[now] do
begin
left:=l;
right:=r;
if l=r then
begin
flag[]:=true;
flag[]:=true;
exit;
end;
end;
mid:=(l+r)>>;
with tree[now] do
begin
lson:=tot+;
build(l,mid);
rson:=tot+;
build(mid+,r);
end;
end; procedure update(var a,b,c:aa);
begin
fillchar(save,sizeof(save),false);
save[]:=c[];
save[]:=c[];
if (b[] and b[] and c[])or(b[] and b[] and c[]) then save[]:=true;
if b[] or (b[] and b[] and c[] and b[] and b[]) then save[]:=true;
if (b[] and b[] and c[])or(b[] and b[] and c[]) then save[]:=true;
if c[] or (c[] and b[] and b[] and b[] and c[]) then save[]:=true;
if (b[] and b[] and c[])or(b[] and b[] and c[]) then save[]:=true;
if (b[] and b[] and c[])or(b[] and b[] and c[]) then save[]:=true;
a:=save;
end; procedure change(now:longint);
var
mid:longint;
begin
with tree[now] do
begin
if left=right then
begin
if y1=y2 then
begin
flag[]:=s='n';
flag[]:=s='n';
flag[]:=s='n';
flag[]:=s='n';
end
else flag[x1+]:=s='n';
exit;
end;
mid:=(left+right)>>;
if y1<=mid then change(lson)
else change(rson);
update(flag,tree[lson].flag,tree[rson].flag);
end;
end; procedure dfs(now:longint);
var
mid:longint;
begin
with tree[now] do
begin
if (left=ll)and(right<=rr) then
begin
ans:=flag;
exit;
end;
if (left>=ll)and(right<=rr) then
begin
update(ans,ans,flag);
exit;
end;
mid:=(left+right)>>;
if ll<=mid then dfs(lson);
if rr>mid then dfs(rson);
end;
end; procedure work;
var
i:longint;
begin
read(s);
if s='E' then halt;
if s='O' then
begin
for i:= to do
read(s);
readln(x1,y1,x2,y2);
if y1>y2 then
begin
swap(x1,x2);
swap(y1,y2);
end;
change();
end
else
if s='C' then
begin
for i:= to do
read(s);
readln(x1,y1,x2,y2);
if y1>y2 then
begin
swap(x1,x2);
swap(y1,y2);
end;
change();
end
else
if s='A' then
begin
for i:= to do
read(s);
readln(x1,y1,x2,y2);
if y1>y2 then
begin
swap(x1,x2);
swap(y1,y2);
end;
ll:=;
rr:=y1;
dfs();
k1:=ans;
ll:=y2;
rr:=n;
dfs();
k2:=ans;
ll:=y1;
rr:=y2;
dfs();
if k1[] then
begin
fillchar(k1,sizeof(k1),true);
update(ans,k1,ans);
end;
if k2[] then
begin
fillchar(k2,sizeof(k2),true);
ans[]:=true;
ans[]:=true;
update(ans,ans,k2);
end;
if x1= then
if x2= then
begin
if ans[] then writeln('Y')
else writeln('N');
end
else
begin
if ans[] then writeln('Y')
else writeln('N');
end
else
if x2= then
begin
if ans[] then writeln('Y')
else writeln('N');
end
else
begin
if ans[] then writeln('Y')
else writeln('N');
end;
end;
end; begin
readln(n);
build(,n);
while true do
work;
end.
1018: [SHOI2008]堵塞的交通traffic - BZOJ的更多相关文章
- 数据结构(线段树):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 ...
- 1018: [SHOI2008]堵塞的交通traffic
1018: [SHOI2008]堵塞的交通traffic 链接 分析: 用线段树维护区间的四个端点的联通情况,然后查询的时候,把所有覆盖到的区间合并起来即可. 六种情况左上到右上(左边到右边的情况)… ...
- [BZOJ 1018] [SHOI2008] 堵塞的交通traffic 【线段树维护联通性】
题目链接:BZOJ - 1018 题目分析 这道题就说明了刷题少,比赛就容易跪..SDOI Round1 Day2 T3 就是与这道题类似的..然而我并没有做过这道题.. 这道题是线段树维护联通性的经 ...
- 【BZOJ】1018: [SHOI2008]堵塞的交通traffic
http://www.lydsy.com/JudgeOnline/problem.php?id=1018 题意:有2行,每行有c(c<=100000)个城市,则一共有c-1个格子,现在有q(q& ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 用线段树维护区间连通性,对于每一个区间记录6个域表示(左上,左下)(左上,右上)(右上, ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)
传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...
- bzoj千题计划108:bzoj1018: [SHOI2008]堵塞的交通traffic
http://www.lydsy.com/JudgeOnline/problem.php?id=1018 关键点在于只有两行 所以一个2*m矩形连通情况只有6种 编号即对应代码中的a数组 线段树维护 ...
随机推荐
- (转)MSMQ(消息队列)
原文作者:虔诚者 点此传送至原文 前段时间研究WCF接触到了MSMQ,所以认真的学习了一下,下面是我的笔记. 我理解的MSMQ MSMQ可以被看成一个数据储存装置,就如同数据库,只不过数据存 ...
- C#中泛型容器Stack<T>
我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...
- Java Concurrency - Concurrent Collections
Data structures are a basic element in programming. Almost every program uses one or more types of d ...
- Spring(3.2.3) - Beans(12): 属性占位符
使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...
- Aliyun OSS SDK 异步分块上传导致应用异常退出
问题描述: 使用Aliyun OSS SDK的BeginUploadPart/EndUploadPart执行异步分块上传操作,程序出现错误并异常退出! 原因分析: Using .NET Framewo ...
- 接口(interface)
接口(interface) 接口(interface)定义了一个可由类和结构实现的协定.接口可以包含方法.属性.事件和索引器.接口不提供它所定义的成员的实现-它仅指定实现该接口的类或结构必须提供的成员 ...
- (转)操作型数据库的春天:MongoDB 1.5亿美元融资背后的故事
大部分融资都要耗时数月,但非关系式数据库MongoDB仅用3周时间就完成了1.5亿美元的融资.为什么这个进程会这么快,MongoDB CEO Max Schireson在接受采访时说,这是因为投资者看 ...
- 【leetcode】363. Max Sum of Rectangle No Larger Than K
题目描述: Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the ma ...
- webuploader上传插件
一:官网 http://fex.baidu.com/webuploader/ 二:示例
- XML美化工具及其他各种美化工具
在线工具 http://www.ostools.net/codeformat/xml 3464网页常用工具 http://www.3464.com/Tools/CodeFormat/ 在线工具大全 h ...