[BZOJ1018][SHOI2008]堵塞的交通traffic(线段树)

开源项目 ruoyi-sso-oauth2(一)环境配置 Ruoyi若依实现单点登录SSO、oauth2认证 阅读详情

=== ===

这里放传送门

=== ===

题解

这题有毒。。。。据说zyf2000写了7k代码结果T了然后又写了一个。。。

考虑把每个小矩形看做序列中的一个元素,然后对每个区间维护六个量,如下图所示(妈呀这可怕的分辨率):
这里写图片描述

线段树里面每一个元素的含义就是在当前节点管辖的矩形序列内部是否存在一条和x0(或其它编号)等价的路径。比如线段树中代表y0的元素为true就代表存在一条从这个区间的左上角走到这个区间的左下角的路径。并且注意到这个东西是可以合并的,也就是说如果把一排小矩形构成的序列以mid为界(这里mid是指两个点构成的一条竖直的线而不是一个小矩形)分成两部分,从序列的左端走到右端或从右端走到左端必然会经过mid这条线,那么就可以左右子树合并来得到父亲的值。

举个例子来说,如果要递推当前节点的x0,有两种方法,一是经过mid这条线段的上端点,一是经过mid这条线段的下端点。第一种情况要求左右子树的x0都联通,第二种情况要求左子树的z0和右子树的z1联通。

如果是线段树的叶子节点的话就只能手动枚举每一种情况了。。。比如上面那个图如果要求x0联通,一种方法是AB那条路直接就是通的,还有一种方法是先走y0再走z1,或者y0->x1->y1,或者z0->y1,或者z0->x1->z1。其他的部分情况也超级多啊一定要想全。。。

注意因为线段树数组里表示的是连通性,而有些时候Close操作的改动可能比较麻烦,举个例子来说,如果在一个单位矩形中联通了x0,y0和x1三条边,那么通过UPD过程会把它所有的6个域都置成true,因为四个点中任意两个都能相互到达。而如果下一步去掉了y0边,按理说这时只有x0和x1能联通了,但线段树中去掉y0以后剩下的5个域都是true,程序会理解为有5条边都联通,然后把对于y0的修改覆盖掉。于是就另开了一个数组存了不加递推的原始的边的情况,在修改的时候一并维护。

查询操作也非常麻烦。。因为[x..y]这一段的连通性可能不止与[x..y]这一段路径有关,可能它会上别的地方去绕一圈再回来,简单来说就是可以直接到达,也可以从左边拐出序列,也可以从右边拐出序列,也可以左右同时拐出序列。一条路径最多有四种不同的走法,都要考虑进去。举例来说,如果矩形序列[left..right]的x0要联通,那么一种方法是直接在序列内部从左上角走到右上角,一种方法是先从区间[1..left-1]的右上角走到右下角,即顺着y1边走,然后再从[left..right]的x1边走,然后从[left..right]的y1边走到终点,还有一种方法是先顺着[left..right]的y0边走,然后走x1边,然后顺着[right+1..c]的y0边走等等。

反正这题就是有毒。。。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int c,cnt;
char o[10];
struct tree{
    bool b[3][2];
    tree(){memset(b,false,sizeof(b));} 
    void UPD(tree g);
}t[500010],ans,org[100010];
void tree::UPD(tree g){//通过边的信息枚举单位矩形的联通状况
    b[0][0]=g.b[0][0]||(g.b[1][0]&&g.b[2][1])||(g.b[1][0]&&g.b[0][1]&&g.b[1][1])||(g.b[2][0]&&g.b[1][1])||(g.b[2][0]&&g.b[0][1]&&g.b[2][1]);
    b[0][1]=g.b[0][1]||(g.b[1][0]&&g.b[2][0])||(g.b[1][0]&&g.b[0][0]&&g.b[1][1])||(g.b[2][1]&&g.b[1][1])||(g.b[2][1]&&g.b[0][0]&&g.b[2][0]);
    b[1][0]=g.b[1][0]||(g.b[2][0]&&g.b[0][1])||(g.b[2][0]&&g.b[1][1]&&g.b[2][1])||(g.b[0][0]&&g.b[2][1])||(g.b[0][0]&&g.b[1][1]&&g.b[0][1]);
    b[1][1]=g.b[1][1]||(g.b[2][1]&&g.b[0][1])||(g.b[2][1]&&g.b[1][0]&&g.b[2][0])||(g.b[0][0]&&g.b[2][0])||(g.b[0][0]&&g.b[1][0]&&g.b[0][1]);
    b[2][0]=g.b[2][0]||(g.b[0][0]&&g.b[1][1])||(g.b[0][0]&&g.b[2][1]&&g.b[0][1])||(g.b[1][0]&&g.b[0][1])||(g.b[1][0]&&g.b[2][1]&&g.b[1][1]);
    b[2][1]=g.b[2][1]||(g.b[1][0]&&g.b[0][0])||(g.b[1][0]&&g.b[2][0]&&g.b[1][1])||(g.b[0][1]&&g.b[1][1])||(g.b[0][1]&&g.b[2][0]&&g.b[0][0]);
}
void update(tree &tr,tree lc,tree rc)
{
    tr.b[0][0]=(lc.b[0][0]&&rc.b[0][0])||(lc.b[2][0]&&rc.b[2][1]);
    tr.b[0][1]=(lc.b[0][1]&&rc.b[0][1])||(lc.b[2][1]&&rc.b[2][0]);
    tr.b[1][0]=lc.b[1][0]||(lc.b[0][0]&&lc.b[0][1]&&rc.b[1][0]);
    tr.b[1][1]=rc.b[1][1]||(rc.b[0][0]&&rc.b[0][1]&&lc.b[1][1]);
    tr.b[2][0]=(lc.b[0][0]&&rc.b[2][0])||(lc.b[2][0]&&rc.b[0][1]);
    tr.b[2][1]=(lc.b[2][1]&&rc.b[0][0])||(lc.b[0][1]&&rc.b[2][1]);
}
void change(int i,int l,int r,int u,int x,int y,int v){
    if (l==r){
        org[l].b[x][y]=v;//注意:直接修改的只有org数组
        t[i].UPD(org[l]);
        return;
    }
    int mid=(l+r)>>1;
    if (u<=mid)
      change(i<<1,l,mid,u,x,y,v);
    else change((i<<1)+1,mid+1,r,u,x,y,v);
    update(t[i],t[i<<1],t[(i<<1)+1]);
}
tree ask(int i,int l,int r,int left,int right){
    tree ans[4];
    int cnt=0;
    if ((left<=l)&&(right>=r))
      return t[i];
    int mid=(l+r)>>1;
    if (left<=mid){
      ans[2]=ask(i<<1,l,mid,left,right);cnt+=1;   
    }//注意用cnt变量记录访问信息
    if (right>mid){
      ans[3]=ask((i<<1)+1,mid+1,r,left,right);cnt+=2;
    }
    if (cnt==3){//只有两半区间都访问过才合并
        update(ans[1],ans[2],ans[3]);
        return ans[1];
    }else return ans[cnt+1];
}
bool query(int left,int right,int x,int y){
    ans=ask(1,1,c,left,right);
    return ans.b[x][y];
}
int main()
{
    scanf("%d",&c);--c;
    scanf("%s",o);
    while (o[0]!='E'){
        int r1,c1,r2,c2;
        scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
        if ((o[0]=='O')||(o[0]=='C')){
            int dlt,x,y,num=min(c1,c2);
            if ((r1==1)&&(r2==1)) x=y=0;
            if ((r1==2)&&(r2==2))
              {x=0;y=1;}//如果是横向边,找到要修改的编号
            if (o[0]=='O') dlt=1;
            else dlt=0;
            if (c1!=c2)
              change(1,1,c,num,x,y,dlt);
            if (c1==c2)
              if (c1==c+1)
                change(1,1,c,c,1,1,dlt);
              else if (c1==1)
                change(1,1,c,1,1,0,dlt);
              else{//注意在修改一条纵向边的时候会改变两个矩形,分别是y1和y0域。
                  change(1,1,c,c1,1,0,dlt);
                  change(1,1,c,c1-1,1,1,dlt);
              }
        }else{
            if ((r1==r2)&&(c1==c2)){
                printf("Y\n");
                scanf("%s",o);
                continue;
            }
            bool can=0;
            int x;
            if (r1==r2){
                if (c1>c2) swap(c1,c2);//保证一定是编号小的在前
                if (r1==1) x=0;
                else x=1;
                if (c1==1&&c2==c+1)
                  can=query(1,c,0,x);
                else//特判边界的情况,防止越界
                  if (c1==1) can=query(c1,c2-1,0,x)||(query(c1,c2-1,2,x)&&query(c2,c,1,0));
                else//如果左端点是1,那么只能从右边拐出去,其它同理
                  if (c2==c+1) can=query(c1,c2-1,0,x)||(query(c1,c2-1,2,x^1)&&query(1,c1-1,1,1));
                else{
                    bool can1,can2,can3;
                 can1=query(c1,c2-1,0,x)||(query(1,c1-1,1,1)&&query(c1,c2-1,2,x^1));
                    can2=query(c2,c,1,0)&&query(c1,c2-1,2,x);
                    can3=query(1,c1-1,1,1)&&query(c1,c2-1,0,x^1)&&query(c2,c,1,0);
                    can=can1||can2||can3;
                }
            }else
              if (c1==c2)
                if (c1==1) can=query(1,c,1,0);
                else 
                  if (c1==c+1) can=query(1,c,1,1);
                  else can=query(1,c1-1,1,1)||query(c1,c,1,0); 
              else{
                  if (c1>c2){
                      swap(r1,r2);swap(c1,c2);
                  }
                  if (r1<r2) x=0;
                  else x=1;
                  if (c1==1&&c2==c+1)
                    can=query(1,c,2,x);
                  else
                    if (c1==1) can=query(c1,c2-1,2,x)||(query(c1,c2-1,0,x)&&query(c2,c,1,0));
                  else
                    if (c2==c+1) can=query(c1,c2-1,2,x)||(query(c1,c2-1,0,x^1)&&query(1,c1-1,1,1));
                  else{
                      bool can1,can2,can3;
                    can1=query(c1,c2-1,2,x)||(query(c1,c2-1,0,x)&&query(c2,c,1,0));
                      can2=query(c1,c2-1,0,x^1)&&query(1,c1-1,1,1);
                    can3=query(1,c1-1,1,1)&&query(c1,c2-1,2,x^1)&&query(c2,c,1,0);
                      can=can1||can2||can3;
                  }
              }
            printf("%c\n",(can==0)?'N':'Y');
        }
        scanf("%s",o); 
    }
    return 0;
}

偏偏在最后出现的补充说明

这种很麻烦的题一定要想清楚再写要不然会花费大量的时间调试。。
原来我以前写代码就这么蠢啊。。。
我还以为是最近才染上总是会把题写麻烦的毛病呢= =

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记 软件工程任务:即时缺陷预测(涉及SE+AI知识) 阅读详情

相关推荐

西门子博图TIA Portal V18实战:用LAD梯形图快速上手一个电机启停控制程序

本文详细介绍了如何在西门子博图TIA Portal V18中使用LAD梯形图快速实现电机启停控制程序。从项目创建、硬件组态到LAD编程和仿真调试,逐步引导读者掌握PLC编程的核心逻辑,特别适合工业自动化领域的初学者快速上手。

weixin_30617737的博客 690

BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1018 \(2*n\)的距形,起初没有边相连,之后有三种操作: 1.加边. 2.删边. 3.询问某两个点是否联通. 分析 这题太神了... 用线段树维护连通性... 放弃解释清楚了... 1 #include <bits/...

aquz77529的博客 278

如何区分Info与CoWoS封装?

这篇文章主要从Info、CoWoS封装的定义、Interposer的种类以及Info、CoWoS封装的种类三方面进行了介绍,希望读者能够有所收获

wangyubo1的博客 7938

bzoj 1018: [SHOI2008]堵塞的交通traffic

链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1018 理论上是可以直接线段树分治的,直接维护点的连通性,但这样是log2log^2log2的 有更优秀的做法 我们考虑对于这种网格图,我们是可以分成两个部分来考虑连通性的 对于每一个部分,我们要维护的是左右边界两两之间的连通性,不难发现,设宽为n,那么状态数是n2n^2n2的 至于部分之间的...

OZY的博客 343

【YOLOv8实战】从零构建番茄成熟度智能检测GUI系统【附完整工程】

本文详细介绍了从零构建基于YOLOv8的番茄成熟度智能检测GUI系统的完整实战流程。内容涵盖环境搭建、数据集准备、模型训练调优,并重点讲解如何使用PyQt5开发图形界面,最终将项目打包为可执行文件,实现AI模型从训练到桌面应用落地的完整工程闭环。

xxx12的博客 821

[XJTUSE DATABASE]——第三章 关系数据库标准语言SQL

新年了,来个大的,写了好几天,将近9000字,希望对大家有所帮助

weixin_47692652的博客 3120

bzoj 1018 [SHOI2008]堵塞的交通traffic

http://www.elijahqi.win/archives/3425 Description   有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个 城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间...

Elijahqi 322

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

1018: [SHOI2008]堵塞的交通traffic

考虑如果是一条直线能用线段树非常容易的维护, 但是现在是一个矩形… 考虑在直线能否联通的情况下实际是维护左右端点连通性 扩展到矩形,思考可以得到,现在维护6个变量能达到相同效果 用lululu代表左上,ldldld代表左下,rururu代表右上,rdrdrd代表右下 那么现在就是维护 lu−ld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lu−ru&nbsp;&nbsp;...

Tgotp的博客 318

第一百三十九回 介绍三个BLE包

本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。

talk_8的专栏 574

信创服务器(麒麟 V10 SP3)安装 NVIDIA GeForce RTX 5070 驱动

本文介绍了在麒麟V10 SP3系统上安装NVIDIA RTX 5070显卡驱动的详细步骤。首先需要关闭nouveau驱动,安装必要的编译环境和工具,确保内核版本与kernel-devel完全一致。最后运行NVIDIA驱动安装程序,关键选择包括启用DKMS支持、编译模块、禁用32位兼容和nouveau驱动。整个流程适用于海光CPU和Blackwell架构GPU的国产操作系统环境。

猿小白的博客 679

BZOJ[1018][SHOI2008]堵塞的交通traffic 线段树

传送门ber~ 哇这个线段树好神啊!! 用线段树维护图连通性,每个节点开个二维数组ai,jai,ja_{i,j}表示这个区间最左面的第iii行能不能走到最右面的第jjj行,同时记录一下最左最右第一行与第二行是否都能互相走到 这六个东西可以用线段树维护啊(看代码)! 细节有点多…具体看代码吧… 注释说的很清楚(自信) 代码如下: #include&lt;algorithm&gt; #i...

谁能代表肯德基 531

SAP-ABAP:SAP信贷管理核心:CL_UKM_BUPA_FACTORY类完整解析与实践指南

SAP信贷管理核心类CL_UKM_BUPA_FACTORY解析 CL_UKM_BUPA_FACTORY是SAP信贷管理(UKM)模块的核心类,作为业务伙伴信贷数据的中央控制台,它提供: 统一入口:标准化实例化客户/供应商信贷对象 主要功能: 获取单条/批量业务伙伴数据 安全保存数据变更 封装底层数据访问逻辑 典型应用场景: 信贷主数据批量维护 自动化限额调整 订单信贷实时检查 性能优化建议: 使用批量方法替代循环单条处理 合理设置字段选择 实施缓存策略 该类通过简洁API简化复杂信贷操作,是SAP信贷管理开

baidu_35680696的博客 1209

BZOJ 1018 SHOI2008 堵塞的交通traffic 线段树

题目大意:给定一张2*n的网格图,多次改变某条边是否可用,多次查询某两个点是否联通 多(yi)年前的我看到这题的第一反应是:这题尼玛能做? 两个点之间的路径可能是这样的: 也可能是这样的: 甚至可能是这样的: 这题能写? 这题其实好写爆了 我们首先忽略第三种情况,假设所有对答案有贡献的边都在两个点的中间 那么我们以每一列为一个叶节点建

世界 2790

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【BZOJ1018】[SHOI2008]堵塞的交通traffic 线段树

【BZOJ1018】[SHOI2008]堵塞的交通traffic Description   有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道...

aodanchui1057的博客 132

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[bzoj1018][SHOI2008]堵塞的交通traffic_线段树

bzoj-1018 SHOI-2008 堵塞的交通traffic 参考博客:https://www.cnblogs.com/MashiroSky/p/5973686.html 题目大意:有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C...

weixin_30673715的博客 100

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[bzoj1018][SHOI2008]堵塞的交通traffic【线段树】

【题目描述】Description  有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通,直到拥堵解决,...

dizhengyue1902的博客 134

【BZOJ1018】【SHOI2008】堵塞的交通traffic(线段树)(好题)

Description  有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个 城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通, 直到拥堵解决,道路才会恢复畅通。初来咋到的你决心毛遂自荐到交

(■-■) 500

【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树维护连通性

Description有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通,直到拥堵解决,道路才会恢复畅通。初来咋到的你决心毛遂自荐到交通部某份差事,部

DQS的树洞 1007

BZOJ1018 | SHOI2008-堵塞的交通traffic——线段树维护区间连通性+细节

【题目描述】 BZOJ1018 | SHOI2008-堵塞的交通traffic  有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个 城市和3C-2条道路。 小人国的交通状况非常槽糕。有的时候由于交通堵塞,两座城市之间的道路会变得不连通, 直到拥堵...

T_T233333333的博客 326

【BZOJ】【P1018】【SHOI2008】【堵塞的交通traffic】【题解】【线段树】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 分类讨论到吐 Code: #include using namespace std; const int maxn=1e5+5; int a[maxn],b[maxn],c[maxn],n;//a上方,b下方,c中间 int getint(){ int res=0;char

退役狗的专栏 1262

【离线 撤销并查集 线段树分治】bzoj1018: [SHOI2008]堵塞的交通traffic

本题可化成更一般的问题:离线动态图询问连通性 当然可以利用它的特殊性质,采用在线线段树维护一些标记的方法 Description   有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列的矩形网格,网格上的每个点代表一个城市,相邻的城市之间有一条道路,所以总共有2C个城市和3C-2条道路。 小人国的交通状况非常槽糕...

weixin_30492047的博客 121

[BZOJ1018] [SHOI2008]堵塞的交通traffic(线段树维护连通性)

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 之前挖的坑,现在填吧。 之前一眼看觉得是LCT,一看时限 3s ???? n非常大是log级别的,并查集肯定不可行, 貌似时限开大也不能用lct因为不是树?(也许是我弱 那么就滚去膜题解了了。 这题其实是线段树维护连通性的经典问题。 突破点就在于只有两行。 那么我们...

私は Mocha!! 461

BZOJ 1018: [SHOI2008]堵塞的交通traffic [线段树 区间信息]

1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 3064  Solved: 1027[Submit][Status][Discuss] Description   有一天,由于某种穿越现象作用,你来到了传说中的小人国。小人国的布局非常奇特,整个国家的交通系统可以被看成是一个2行C列...

weixin_33923148的博客 120

BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

传送门 解题思路   可以离线,然后确定每个边的出现时间,算这个排序即可。然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include&...

weixin_30640769的博客 138

bzoj1018[SHOI2008]堵塞的交通traffic——线段树

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1018 巧妙的线段树。维护矩阵四个角的连通性。   考虑两个点连通的可能路径分成3部分:两点左边、两点中间、两点右边;   就拿中间部分来说,需要这个矩阵的四个角的连通性。所以就用线段树维护一下。 注意不要写得冗余了。比如同一块的左上到右下已经考虑过自己的左上到左下+左下到右下,更新别...

weixin_33872660的博客 122
上一篇: 求解离散对数——BSGS算法の板子
下一篇: [BZOJ3994][SDOI2015]约数个数和(数论)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值