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;它能触发大脑干…

『实践』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;该杂志每年都会评选出当年的…

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

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

口罩巨头挑战“量子霸权”,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《国内哲学动态》皮亚杰有关同化和顺应及其平衡的图式学说是对智慧机制的一种结构主义的共时性分析,但是他更重视对智慧机制进行建构主义的历时性研究。主体关于客体的知识以及主体自身的认识图式都不仅仅是一种状态体系 , 而首…

前途无量的MEMS传感器

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

【技术趋势】德勤发布2020技术趋势报告,五个新趋势可引发颠覆性变革

来源&#xff1a;产业智能官“2020 年的趋势将颠覆整个行业&#xff0c;并在未来十年重新定义业务&#xff0c;即使数字创新已成为各种规模企业的常规行为。”德勤管理咨询新兴技术研究总监兼政府及公共服务首席技术官 Scott Buchholz 在一份报告中如是说。近日&#xff0c;《德…

Java IO流

IO流是用来处理设备之间的数据传输的&#xff0c;Java对数据的操作都是使用流的方式处理的&#xff0c;而且Java将处理流的操作封装成IO流对象了。 一、IO流的分类 流按照操作的数据分为&#xff1a;字节流、字符流 流按照流的方向分为&#xff1a;输入流、输出流 二、字节流&a…

Nature:FB和推特的数据是如何革新社会科学,改变世界的?

大数据文摘出品来源&#xff1a;nature编译&#xff1a;张睿毅2007年&#xff0c;一群有野心的科学家召集了一次会议&#xff0c;讨论新兴的社会科学数据处理的艺术。他们想运用自己的技能来改变世界。在演讲中&#xff0c;马萨诸塞州剑桥市哈佛大学的政治学家加里金&#xff0…

格力入局的数控机床,掌握“核心科技”有多难?

来源&#xff1a;脑极体梦想还是要有的&#xff0c;万一要实现了呢&#xff1f;即便不能马上实现&#xff0c;坚持努力也是可以的。2016年&#xff0c;在格力主办的“第二届中国制造高峰论坛”上&#xff0c;董明珠曾放出这样的豪言壮语&#xff1a;两年后&#xff0c;做出最顶…

深度解析:国产化软硬件全景梳理

本文来源&#xff1a;信创研究框架作者&#xff1a;谢春生、郭雅丽、郭梁良、金兴内容包括产业概括&#xff0c;发展背景、推进节奏和产业全景图&#xff0c;云计算全栈架构、产业链全景图。核心技术&#xff0c;CPU处理器、操作系统、中间件、办公套件、安全保密等。芯片处理器…

空间连接时计算总和_学习CALCULATE函数(六)丨帕累托之累计求和

(写在前面的话&#xff1a;非常感谢韭菜大神和冬神的指点&#xff0c;万分感谢。)哎&#xff0c;说归说&#xff0c;还是需要继续学习CALCULATE函数&#xff0c;也是蛮无奈的。最近白茶在研究帕累托分析法&#xff0c;本期分享一下帕累托ABC分析法的基础——累计求和。这里简要…

揭秘仿人机器人背后的技术秘密 | 优必选研究院技术专家刘益彰【附PPT】

来源&#xff1a;机器人大讲堂机器人大讲堂直播间037期目前国际上主要有两种控制方式的仿人机器人&#xff1a;一种是基于位置控制的仿人机器人&#xff0c;另一种是基于力矩控制的仿人机器人。由于类人运动的功能的多样性、复杂性以及高维度性&#xff0c;所以仿人机器人的研究…

luoguP1463:反素数ant(打表心得☆)

题目描述对于任何正整数x&#xff0c;其约数的个数记作g(x)。例如g(1)1、g(6)4。如果某个正整数x满足&#xff1a;g(x)>g(i) 0<i<x&#xff0c;则称x为反质数。例如&#xff0c;整数1&#xff0c;2&#xff0c;4&#xff0c;6等都是反质数。现在给定一个数N&#xff0…