bzoj1018 [SHOI2008]堵塞的交通traffic

题目链接

分析:
这道题的题解很长,所以就不粘题面了,我们一点一点讲明白这道题

很荣幸,我看了题面之后
想到了这道题

可以很高兴的发现10w是线段树能够承受的范围
我们可以利用线段树维护连通性,每个节点内我们要维护6个信息,分别表示连通性:
这里写图片描述
读入完成后,我们面临的第一个问题就是道路的状态改变

这就牵扯到了一个change函数

这里写图片描述

link函数中,

我们只维护了向下走的直接连通性
至于其他的连通性,我们在update函数中完成
这里写图片描述
这里写图片描述

ask函数

这次默认列数小的点为第一个点
这两个点就把整个序列分成了3个部分 :1~c1,c1~c2,c2~n
我们通过get函数求出这三个部分的连通情况
之后就是特判了
这里写图片描述

tip

题目中的(r1,c1)
表示的是第r1行,第c1列

第一次交上去:WA
之后就是一句一句的排查,
终于把问题锁定在了ask函数中
一开始以为是特判的问题,但是查了半天也没有什么异常

最后才发现是在get的时候
手残把c1,c2写错了

这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>using namespace std;const int N=100010;
struct node{bool x[2],y[2],z[2];
};
node t[N<<2];
int n,r1,r2,c1,c2;
bool a[N][2][2];
char opt[10];
int dx[3]={-1,0,1};   //每个点只能与三个点直接相连 
int dy[3]={0,1,0};void build(int bh,int l,int r)
{if (l==r){t[bh].x[0]=1;  //横向 t[bh].x[1]=1;return;}  int mid=(l+r)>>1;build(bh<<1,l,mid);build(bh<<1|1,mid+1,r);
}void update(node &bh,node &lc,node &rc,int mid)
{bh.x[0]=(lc.x[0]&&a[mid][0][0]&&rc.x[0])||(lc.z[0]&&a[mid][1][0]&&rc.z[1]);  //左上-右上 bh.x[1]=(lc.x[1]&&a[mid][1][0]&&rc.x[1])||(lc.z[1]&&a[mid][0][0]&&rc.z[0]);  //左下-右下 bh.y[0]=lc.y[0]||(lc.x[0]&&a[mid][0][0]&&rc.y[0]&&a[mid][1][0]&&lc.x[1]);  //左上-左下bh.y[1]=rc.y[1]||(rc.x[0]&&a[mid][0][0]&&lc.y[1]&&a[mid][1][0]&&rc.x[1]);  //右上-右下bh.z[0]=(lc.x[0]&&a[mid][0][0]&&rc.z[0])||(lc.z[0]&&a[mid][1][0]&&rc.x[1]);  //左上-右下 bh.z[1]=(lc.x[1]&&a[mid][1][0]&&rc.z[1])||(lc.z[1]&&a[mid][0][0]&&rc.x[0]);  //左下-右上 
}void link(int bh,int l,int r,int p)
{if (l==r)  //单点修改 {t[bh].y[0]=t[bh].y[1]=t[bh].z[0]=t[bh].z[1]=a[p][0][1];t[bh].x[0]=t[bh].x[1]=1;return;} int mid=(l+r)>>1;if (p<=mid) link(bh<<1,l,mid,p);else link(bh<<1|1,mid+1,r,p);update(t[bh],t[bh<<1],t[bh<<1|1],mid);
}void change(bool o)   
{int d;for (int i=0;i<3;i++)if (c1+dx[i]==c2&&r1+dy[i]==r2)   //两个点的相对位置d=i;if (d==0) a[c2][r2][0]=o,link(1,1,n,c2); //1-->2 左 else if (d==1) a[c1][0][1]=o,link(1,1,n,c1); //下 else a[c1][r1][0]=o,link(1,1,n,c1); //右 
}void get(node &p,int bh,int L,int R,int l,int r)
{if (L>=l&&R<=r) {p=t[bh];return;}int mid=(L+R)>>1;if (r<=mid) get(p,bh<<1,L,mid,l,r);else if (l>mid) get(p,bh<<1|1,mid+1,R,l,r);else{node t1,t2;get(t1,bh<<1,L,mid,l,r);get(t2,bh<<1|1,mid+1,R,l,r);update(p,t1,t2,mid);}
}void ask()
{if(c1>c2) swap(r1,r2),swap(c1,c2);node p1,p2,p3;get(p1,1,1,n,1,c1);get(p2,1,1,n,c1,c2);get(p3,1,1,n,c2,n);if (r1==r2){if (r1==0){if (p2.x[0]||(p1.y[1]&&p2.x[1]&&p3.y[0])||(p1.y[1]&&p2.z[1])||(p3.y[0]&&p2.z[0])) printf("Y\n");else printf("N\n");}else{if (p2.x[1]||(p2.x[0]&&p1.y[1]&&p3.y[0])||(p1.y[1]&&p2.z[0])||(p3.y[0]&&p2.z[1])) printf("Y\n");else printf("N\n");}}else{if (r1==0){if (p2.z[0]||(p1.y[1]&&p2.x[1])||(p2.x[0]&&p3.y[0])) printf("Y\n");else printf("N\n");}else{if (p2.z[1]||(p1.y[1]&&p2.x[0])||(p3.y[0]&&p2.x[1])) printf("Y\n");else printf("N\n");}}
}int main()
{scanf("%d",&n);build(1,1,n);scanf("%s",&opt);while (opt[0]!='E'){int a,b,c,d;scanf("%d%d%d%d",&r1,&c1,&r2,&c2);r1--;r2--;if (r1>r2) swap(c1,c2),swap(r1,r2);   //点从上到下编号 if (opt[0]=='O') change(1);else if (opt[0]=='C') change(0);else ask();scanf("%s",&opt);}return 0;
}

转载于:https://www.cnblogs.com/wutongtong3117/p/7673190.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Science重磅!人类特有基因触发猴子长出更强大的大脑

本文系生物谷原创编译&#xff0c;欢迎分享&#xff0c;转载须授权&#xff01;人类大脑在进化过程中的扩张&#xff0c;特别是新大脑皮层的扩张&#xff0c;与诸如推理和语言等认知能力有关。有一种叫做ARHGAP11B的基因&#xff0c;只在人类身上表达&#xff0c;它能触发大脑干…

mysql不同的类的个数_Mysql数据库-SQL优化-统计某种类型的个数

有时我们想统计某种类型有多少个&#xff0c;会用这个SQL。全表扫描之余&#xff0c;还要filesort&#xff0c;耗时1.34秒。mysql> select country,count(*) from t1 group by country;-------------------| country | count(*) |-------------------| NULL | 32 || africa …

『实践』Matlab实现Flyod求最短距离及存储最优路径

Matlab实现Flyod求最短距离及存储最优路径 一、实际数据 已知图中所有节点的X、Y坐标。 图中的节点编号&#xff1a;矩阵中的编号 J01-J62:1-62; F01-F60:63-122; Z01-Z06:123-128; D01-D02:129-130. 二、Floyd求所有节点间的最小距离及通过矩阵存储最优路径的节点 1 function …

MIT Technology Review 2020年“十大突破性技术”解读 【中国科学基金】2020年第3期发布...

来源&#xff1a;国家自然科学基金委员会MIT Technology Review 2020年“十大突破性技术”解读&#xff3b;编者按&#xff3d; 2020年2月26日&#xff0c;MIT Technology Review一年一度的“十大突破性技术”榜单正式发布。自2001年起&#xff0c;该杂志每年都会评选出当年的…

动态代理Java实现

思考&#xff1a;在IBuyWatermelon添加一个方法selectWatermelon() 静态代理中需要在RealSubject中实现该方法&#xff0c;而且Proxy也要实现该方法调用RealSubject中的实现&#xff0c;如果再增加10个方法还是得这样操作&#xff0c;导致大量的代码重复。 现在来看动态代理&am…

mysql 非等值条件 索引_慢SQL简述与定位

慢SQL日志简述通过命令和查看日志文件的方式直接查看mysql服务器的慢sql参数配置参数作用slow_query_log是否启用slow_query_log_file日志文件long_query_time慢sql阈值log_slow_adimin_statements是否记录数据库管理相关的sqllong_queries_not_using_indexes是否记录未使用索引…

大数据是怎么知道你去过新发地的?

来源&#xff1a;科学加&#xff08;北京科技报记者&#xff1a;赵天宇&#xff09;“经过全市大数据分析&#xff0c;您可能在5月30日(含)以后去过新发地批发市场……”随着新发地市场新冠源头被锁定&#xff0c;近日来&#xff0c;大数据筛查&#xff0c;成为不少北京市民在朋…

[模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表

一年前听说的这东西。。。现在终于会了。。。 1 #include<cstdio>2 #include<iostream>3 #include<cstring>4 #include<cmath>5 #include<ctime>6 #include<cstdlib>7 8 #include<string>9 #include<stack>10 #include<que…

mysql更新数据能回滚吗_MySQL数据回滚-误更新和删除时快速恢复

这世界上有后悔药– www.houhuiyao.cc 后悔药数据恢复 站长语前面的内容也提到过update或delete误更新删除了数据后如何恢复。实际生产环境中常常因各种不同场景导致一些办法有效一些办法无效&#xff0c;当然&#xff0c;最有效的办法依然是备份&#xff01;虽然啰嗦&#xff…

口罩巨头挑战“量子霸权”,3个月造出的『最强量子计算机』靠谱不?

摘要霍尼韦尔(Honeywell)最近可是非常忙活。作为全球数一数二的口罩厂商&#xff0c;疫情期间霍尼韦尔一直在努力生产口罩&#xff0c;大家对它的印象也多停留在口罩生产者的层面。但是事实上&#xff0c;人家是正经的多元化高科技制造企业&#xff0c;航空产品、汽车产品、涡轮…

三极管稳压管组成的线性电源关键理解

1. A点电压为20V.B点电压是稳压管电压5.6V.则A到B的电流是固定的。 2. 加电后在调整三极管&#xff0c;负载&#xff0c; 稳压管的电流回路如图。&#xff08;注意电流方向&#xff0c;a->b电流方向和大小都是基本不变的。&#xff09; 转载于:https://www.cnblogs.com/ture…

oci连接mysql_使用 OCILIB 连接并操作 Oracle 数据库

OCILIB是一个跨平台的Oracle驱动程序&#xff0c;可提供非常快速和可靠地访问Oracle数据库。它提供了一个丰富&#xff0c;功能齐全&#xff0c;并易于使用的APIOCILIB是一个跨平台的Oracle驱动程序&#xff0c;&#xff0c;可提供非常快速和可靠地访问Oracle数据库。它提供了一…

万字长文:2020智源大会总结-多角度看AI的未来

来源&#xff1a;混沌巡洋舰导读&#xff1a;智源大会2020 聚焦AI的未来&#xff0c;大家都知道&#xff0c; 2010是深度学习的时代&#xff0c; 我们经历了AI从巅峰进入到瓶颈的过程。那么什么是2020这个十年AI的中心&#xff1f;近一段大家逐步从各个不同的角度切入到这个主题…

python OCR 图形识别

1、pip install pyocr 2、pip install PIL 3、安装tesseract-ocr http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe exe文件&#xff0c;下载后直接安装&#xff0c;建议默认安装过程中的选项&#xff0c;安装目录默认C:\Program F…

python生成文件夹并向文件夹写文件_python - 文件练习生成100个MAC地址写入文件

需求&#xff1a;生成100个MAC地址并写入文件中&#xff0c;MAC地址前6位(16进制)为01-AF-3B解题思路&#xff1a;要求生成这样格式的mac地址&#xff1a;01-AF-3B-xx-xx-xx首先生成-xx格式&#xff0c;16进制组成的数,注意MAC英文字母为大写。拼接成为&#xff1a;01-AF-3B-xx…

智能发展与双重建构

来源&#xff1a; 人机与认知实验室本文摘自1983.5《国内哲学动态》皮亚杰有关同化和顺应及其平衡的图式学说是对智慧机制的一种结构主义的共时性分析,但是他更重视对智慧机制进行建构主义的历时性研究。主体关于客体的知识以及主体自身的认识图式都不仅仅是一种状态体系 , 而首…

2017.09.21学习总结

两天的时间主要学习了html的基本结构&#xff0c;标签&#xff0c;列表以及表格。 表格方面<td><tr>总是弄混&#xff1b; 合并用起来有些眼花&#xff0c;不过仔细的研究一下还是没什么问题。 加油&#xff01;努力&#xff01;目标&#xff1a;资深码农~~转载于:…

springboot2整合mysql5_SpringBoot2整合SSM框架详解

SpringBoot2整合SSM框架详解发布时间&#xff1a;2019-01-15 21:33,浏览次数&#xff1a;1218, 标签&#xff1a;SpringBootSSM<>开发环境* 开发工具&#xff1a;Eclipse STS插件* JDK版本&#xff1a;9.0.4* MySQL版本&#xff1a;8.0.12* Spring Boot版本&#xff1a;…

前途无量的MEMS传感器

来源&#xff1a;转载自「民生证券」&#xff0c;谢谢微机电系统&#xff08;Microelectromechanical Systems&#xff0c;简称 MEMS&#xff09;是将微电子技术与精密机械技术结合发展出来的工程技术&#xff0c;尺寸在 1 微米到 100 微米量级&#xff0c;涵盖机械&#xff08…

怎么查看kudu的版本_apache版本kudu kudu-impala安装方法

kudu安装方法简介第一步&#xff1a;下载rpm包http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5.12.2/RPMS/x86_64/kudu-1.4.0cdh5.12.20-1.cdh5.12.2.p0.8.el6.x86_64.rpmkudu-client-devel-1.4.0cdh5.12.20-1.cdh5.12.2.p0.8.el6.x86_64.rpmkudu-client0-1.4.0cdh5.…