自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

beginend

只要在路上,就没有到不了的远方

  • 博客(40)
  • 收藏
  • 关注

原创 bzoj 4721: [Noip2016]蚯蚓 单调队列

题意Description本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3。蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓。蛐蛐国里现在共有n只蚯蚓(n为正整 数)。每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,…,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓)。每一

2016-11-30 21:23:54 605

原创 bzoj 3489: A simple rmq problem 可持久化线段树套可持久化线段树

题意给出n个数,每个数为[1,n],有m个询问,每次询问[l,r]内最大的只出现过一次的数。强制在线。 n<=100000,m<=200000分析一开始还以为是分块,但想了想发现不可做,然后想了一下主席树什么的也还是不会做,就只好去看题解了。然后发现有好多神奇的做法,像KDtree,树套树,树套堆等,但我到现在还不会怎么用树套堆来做。先求出每一个位置的next和last分别表示前面第一个和它的数一

2016-11-30 20:46:27 447

原创 bzoj 2288: 【POJ Challenge】生日礼物 贪心+优先队列

题意给出一个长度为n的数列,要求从中取出不超过m段连续的数,使其和最大。 n<=100000分析之前看黄学长的blog说可以转换成数据备份,但却没有思路,看了题解后才恍然大悟。这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉。 有一种想法就是把所有的正值都加起来,然后把所有数的绝对值加进优先队列,每次去一个最小的出来然后减掉,最后的即为答案。 为什么是正确

2016-11-29 21:52:20 934

原创 bzoj 1150: [CTSC2007]数据备份Backup 贪心+优先队列

题意有n栋楼排成一排,要求在k对楼之间连接电缆,每栋楼只能被连接一次,求最小的∑|dis[x]−dis[y]|\sum |dis[x]-dis[y]|.x,y分别为电缆的两个端点。 n<=100000分析显然k对电缆连接的必然都是相邻的两栋楼,那么问题可以转换成有n-1个数,a[i]=dis[i+1]-dis[i],从中取出k个数满足其互不相邻且和最小。 那么就可以用贪心来做。每次找一个最小的,

2016-11-28 21:16:22 357

原创 bzoj 2151: 种树 贪心+优先队列

题意有围成一圈的n个位置,每一个位置有一个权值,现要求选出m个位置,使得这m个位置互不相邻且权值和最大。 n<=200000分析如果没有m这个限制的话我可能就会跑去写网络流了……我们考虑如果没有互不相邻这个限制的话要怎么做,很显然就是直接用优先队列取出前m大的即可。 但加上这个限制呢?我们考虑还是这样来做,那么取出一个最大的,假设下标为x,那么x+1和x-1一起选的话有可能是比选x要优的。但可以

2016-11-28 20:07:10 622

原创 bzoj 3211: 花神游历各国 树状数组+并查集

题意给出n个数,要求资瓷下列操作: 1 l r表示查询l到r的和 2 l r表示把每个a[x] (l<=x<=r)变为sqrt(x) n<=100000,m<=200000分析显然开根号是不能区间维护的,但发现一个int最多开五次根号就会变为1,所以我们可以用并查集来维护每个数的下一个可以开根号的数是哪一个,那么就可以均摊O(1)来暴力修改了。 区间操作用树状数组搞定即可。第一次写并查集维护

2016-11-24 21:52:48 643

原创 bzoj 3236: [Ahoi2013]作业 莫队算法+分块

题意给出一个长度为n的序列,元素范围为[1,n]。给出求个询问,格式为l r a b,表示询问[l,r]中在[a,b]范围内的数有多少个和在[a,b]范围内的数有多少种。 n<=100000 m<=1000000分析搞不懂那些莫队+树状数组是怎么卡过的,复杂度明明已经炸掉不知道多少了……其实只要对权值分块即可做到O(1)O(1)修改,O(n√)O(\sqrt n)询问,那么总时间复杂度就是O(nn

2016-11-24 21:03:32 718

原创 bzoj 1741: [Usaco2005 nov]Asteroids 穿越小行星群 网络流

题意有一个n*n的01矩阵,有m个点为1,每一次可以把一行或一列的1全部变成0,问最少要消多少次。 n<=500,m<=10000分析用最小割来做。 若一个点(i,j)为1则若不消第i行则必消第j列,从i到j+n连一条inf的边。从s到1-n,从n+1-n*2连流量为1的边,那么最小割即为答案。不想打dinic了,所以直接去blog上面复制了一个板子下来……代码#include<iostream

2016-11-24 19:52:35 618

原创 bzoj 1597: [Usaco2008 Mar]土地购买 斜率优化dp

题意给出n块土地,每块土地都有其长和宽。若把若干块土地放在一起购买则需要的花费为最大的长*最大的宽。求购买所有土地的最小花费。 n分析首先很容易得到,若有两块土地长宽分别为l1,w1,l2,w2,若满足l1>=l2且w1>=w2则第二块土地可以忽略不计。 那么就先把所有没用的土地都去掉,并按长从小到大排序,那么宽自然就是递减的了。显然每次必然选取连续的一段,设f[i]f[i]表

2016-11-23 20:59:25 665

原创 bzoj 1059: [ZJOI2007]矩阵游戏 网络流

题意给出一个n*n的01矩阵,每次可以交换任意行和任意列,问能不能使得主对角线上布满1. n<=200分析问题可以转换成问是否有n个1满足不同行且不同列,那么对于每一个为1的格子(i,j),从i到j连一条边,最后跑最大匹配即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<alg

2016-11-23 19:48:17 372

原创 bzoj 2683: 简单题 cdq分治+树状数组

题意要求资瓷下列操作: 1 x y z把(x,y)加上z 2 x1 y1 x2 y2求矩形x1 y1 x2 y2的权值和 n<=500000,x,y<=n,q<=200000分析首先可以把一个询问用容斥原理拆成四个询问,然后在cdq分治中二分一个横坐标mid,然后把操作从前往后扫一遍,若是修改操作且横坐标不大于mid则处理,若是询问操作且横坐标大于mid则处理;然后把操作按照横坐标分成左右两部

2016-11-22 21:50:37 398

原创 bzoj 4519: [Cqoi2016]不同的最小割 最小割树

题意给出n个点的带权无向图,问对于所有点对来说有多少不同的最小割。 n<=850,m<=8500分析裸的最小割树,分治求出所有不同的最小割后用一个数组储存即可。一开始用unique忘了先排序……代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<

2016-11-22 20:35:33 700

原创 bzoj 2229: [Zjoi2011]最小割 分治最小割(最小割树)

题意给出一个无向图,每次询问有多少点对的最小割不大于q。 n分析这题显然不是让你跑n^2次最大流的……一开始把所有点放进一个集合里面。先从集合中随意取出两个点作为源汇,在整个图中跑一遍最大流,就得到了这两个点的最小割,并把所有点分为了s集和t集,那么就更新s集到t集的答案,并把s集和t集往下递归,如此类推,到最后即可得到所有点对的最小割。什么?你问我为什么是对的?因为正确

2016-11-22 20:05:12 2053 2

原创 bzoj 4520: [Cqoi2016]K远点对 KDtree

题意已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对。 n<=100000,k<100分析就相当于把所有的点的前K远点对找出来然后扔进优先队列里面维护就好了。因为(x,y)和(y,x)是算同一对,所以要把m乘上2.一开始不停地WA是以为估价函数写错了,后来又是因为有个地方没有开long long。代码#include<iostream>#include<cstdio>#include<

2016-11-21 21:17:15 842

原创 bzoj 4241: 历史研究 分块

题意给出n个数,每次询问一个区间最大的s(i)*i,s(i)为i这个数出现的次数。 n,m<=100000分析毫无压力1A,不过居然跑了50s+。先离散化,预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示i在前j块出现的次数,询问的时候两端的块扫一遍,维护一个桶即可。代码#include<iostream>#include<cstdio>#include<cstdlib>

2016-11-20 21:09:00 464

原创 NOIP2016滚粗记

在停了三个星期的课之后,终于迎来了NOIP2016.不同于上一年菜的抠脚的自己,今年的我可是信心满满呢,想着:虽然离进队还有些差距,但做做NOIP什么的还是没有太大问题的吧(强行立了个flag)。day0真巧今天是校运会呢,初中一大帮同学都在下午回来,然而那时我已经在广州不知道那个酒店的房间里面复习板子了吧。真不爽啊~~一大早就跑来机房切了两道bzoj很水很水的题,就当保持了一下手速(这里实在不知道

2016-11-20 20:23:01 2334

原创 bzoj 1005: [HNOI2008]明明的烦恼 prufer编码+高精度

题意给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?如果对度数不要求,则输入-1 n<=1000分析根据prufer编码,很容易得知若一个点的最终读数为d,则该点在prufer序列里面出现的次数为d-1,那么对于其他度数不限的点,我们就可以放任意位置和次数。设有最终度数的点的∑d−1=tot\sum d-1=tot,有k个点的度数不要求那么ans=C

2016-11-18 07:47:42 377

原创 bzoj 1211: [HNOI2004]树的计数 prufer编码

题意一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。分析可以知道一组prufer编码唯一对应着一棵树,一棵树也唯一对应着一组prufer编码。 对于一棵给定所有节点度数的树,显然每个点会在prufer编码中出现d-1次,那么我们排列组合

2016-11-17 20:49:33 587

原创 bzoj 1180: [CROATIAN2009]OTOCI link cut tree

题意给出n个点,要求资瓷若干操作: 1、bridge A B:询问结点A与结点B是否连通。如果是则输出“no”。否则输出“yes”,并且在结点A和结点B之间连一条无向边。 2、penguins A X:将结点A对应的权值wA修改为X。 3、excursion A B:如果结点A和结点B不连通,则输出“impossible”。否则输出结点A到结点B的路径上的点对应的权值的和。给出q个操作,要求在线处

2016-11-17 15:29:04 383

原创 bzoj 3809: Gty的二逼妹子序列 分块+莫队算法

题意给出n个数m次询问,每次询问[a,b]之间的颜色在区间[l,r]之间出现了多少种。 n<=100000,m<=1000000分析看到28M的内存整个人都不好了啊。 树套树什么的就别想了~~ 这题很容易想到莫队+树状数组,那样的话复杂度是O(nn√logn)O(n\sqrt nlogn) 还有一种离奇的分块做法,就是对权值分块,那么修改就是O(1)O(1),查询就是O(nn√)O(n\sq

2016-11-17 15:06:25 329

原创 bzoj 2821: 作诗(Poetize) 分块

题意给出n个数,每次询问一个区间内出现正偶数次的数的种类数。强制在线。 n,m<=50000分析如果是离线的话很显然直接维护一个桶然后上莫队就好了。 但如果强制在线的话……分块大法好!!!分块大法好!!!分块大法好!!! 预处理ans[i,j]表示第i块到第j块的答案,sum[i,j]表示i在前j块出现的次数,然后每次询问的时候对两端的块分别扫一遍即可。 记得用完桶之后要把桶清零。代码#in

2016-11-17 08:17:50 317

原创 bzoj 1430: 小猴打架 prefer编码

题意一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友。每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友。经过N-1次打架之后,整个森林的小猴都会成为好朋友。 现在的问题是,总共有多少种不同的打架过程。 比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1-2}{2-3,1-3}六种不同的打架过程。

2016-11-15 21:50:47 441

原创 bzoj 1266: [AHOI2006]上学路线route 最短路+网络流

题意给出一个n个点m条边的无向图,每一条边有一个长度t和权值c,问1到n的最短路,还有最少可以花费多少价值使得1到n的最短路边长。 n<=500分析第一问最短路直接上…… 第二问,我们可以把所有最短路上的边都加进来,那么问题就转换成了求一个最小割,直接上……代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstri

2016-11-15 20:55:07 458

原创 bzoj 2176: Strange string 字符串最小表示法

题意给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的任务就是找出这个字符串. n<=10000000分析这题貌似还可以用SA或SAM来做,但是10000000就肯定爆炸啦~~ 所以就去学了一发字符串循环同构的最小表示法。 还有这题要用unsigned cha

2016-11-15 14:40:26 602 2

原创 bzoj 1984: 月下“毛景树” 线段树+树链剖分

题意给出一棵n个节点的树,每条边都有权值,要求资瓷以下操作: Max x y表示查询x到y之间的最大权值 Cover x y z表示把x到y的权值赋为z Change x y表示把第x条边的权值变成y Add x y z表示把x到y的权值加上z n+m<=100000分析一眼树剖+线段树。 把边权下放到两端深度较大的那个点即可。 线段树维护两个标记和最大值。 注意两个点的lca不用处

2016-11-15 08:13:42 556

原创 bzoj 1975: [Sdoi2010]魔法猪学院 k短路+A*

题意给出n个点m条有向边,求最多有多少条1到n的不同路径使得每条路劲的权值加起来不超过c。 n<=5000,m<=200000分析很显然题目是要我们找一个最大的k满足1到n前k短的路径和不超过c。 那么我们就要来求k短路。k短路用spfa来实现,每次在优先队列里面取一个估价函数f(i)=g(i)+h(i)的点出来去更新其他的点,若一个点第k次出队则这次必然是第k短路。g(i)表示的是1到i当前的

2016-11-14 14:15:57 379

原创 bzoj 1857: [Scoi2010]传送带 三分套三分

题目传送门分析恩NOIP快来了,作为一个没写过三分的弱菜,赶紧找一道三分题写一写,免得到时候写不出来。三分法对于一个上凸函数,若对于Ax,Bx(Ax < Bx),有Ay < By则峰顶必然在(Ax,+∞);若有Ay < By则峰顶必然在(-∞,Bx)中;若有Ay=By则峰顶必然在[Ax,Bx]中。 下凸函数同理。回到这题,这题要我们在两条直线上分别求两个点,那么我们假设直线AB上取的点已经固定,那

2016-11-14 07:26:37 357

原创 bzoj 1009: [HNOI2008]GT考试 KMP+矩阵乘法

题意求有多少个长度为n且仅包含0到9的字符串不包含一个长度为m的子序列。 n<=10^9,m<=20分析先得到s的next数组,然后根据dp方程f[n][u]+=f[n-1][i],表示在kmp上走了n步走到节点u的方案数,我们可以构造一个状态转移矩阵,然后矩阵快速幂就好了。代码#include<iostream>#include<cstdio>#include<cstdlib>#inclu

2016-11-12 11:09:37 351

原创 bzoj 2738: 矩阵乘法 cdq分治+二维树状数组

题意给出一个n*n的矩阵和q个询问,每次询问一个子矩阵内第k小的数。 n<=500,q<=60000,a[i,j]<=1000000000分析毕竟cdq分治做的题太少,没有往这方面去想。 知道了要用cdq分治来做就很简单了,二分一个答案然后把小于mid的元素都扔进二维树状数组里,判断每个询问小于mid的元素个数,若小于k则扔到右边,不然扔到左边就好了。 一开始zz了,每一次都是暴力枚举整个矩阵

2016-11-11 21:53:03 416

原创 bzoj 2500: 幸福的道路 动态规划+单调栈

题意给出一棵树,每条边都有一个长度。我们规定每个点的权值为从该点开始走过的一条最长的路径的长度。 求一个最长的区间[l,r],使得[l,r]里面点权的最大值和最小值只差不超过m。 n<=1000000分析首先我们要把点权求出来。 那么我们设1为根节点,用两个数组fir[i]和sec[i]维护从节点i开始最长的路径和次长的路径。 第一次先求出起点为i终点在i的子树内的最长路和次长路,第二次再求

2016-11-11 16:19:35 600 1

原创 bzoj 1367: [Baltic2004]sequence 左偏树+贪心

题意给出n个数a[1..n],要求求n个数b[1..n],满足b是严格递增且∑abs(a[i]−b[i])\sum abs(a[i]-b[i])最小。 n分析这题好劲啊!!!看了好久题解才看懂。可以参考黄源河dalao的论文左偏树特点及其应用一看题的时候没什么思路,但我们可以按照从一般到特殊的思想去思考这道题。 若a[1]若a[1]>=a[2]>=…>=a[n],那么

2016-11-10 21:50:53 427

原创 bzoj 3781: 小B的询问 莫队算法+分块

题意有一个序列,包含N个1~K之间的整数。一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。 n,m,k<=50000分析莫队算法好劲啊!!! 按所在块为第一关键字,右端点为第二关键字对询问排序,然后就可以直接上莫队啦。代码#include<iostream>#include<cstdio>

2016-11-09 10:55:55 391

原创 bzoj 3832: [Poi2014]Rally 线段树+拓扑排序

题意给定一个N个点M条边的有向无环图,每条边长度都是1。请找到一个点,使得删掉这个点后剩余的图中的最长路径最短。 2<=N<=500 000,1<=M<=1 000 000分析这题好劲啊,根本想不到。设一个超级源点s和超级汇点t,从s向所有点连一条边,从每个点向t连一条边,那么原图的最长路就变成了s到t的最长路。 预处理处f[i]表示s到点i的最长路,g[i]表示点i到t的最长路,给每一条边设置

2016-11-08 19:09:30 408

原创 bzoj 2440: [中山市选2011]完全平方数 莫比乌斯函数

题目传送门分析莫比乌斯函数μ(i)=(−1)k(-1)^k(i为k个互不相等的素数的成绩),否则μ(i)=0 那么对于这题,可以想到用容斥原理,那么答案就是n-奇数个质数的平方的倍数的个数+偶数个质数的平方的倍数的个数 那么ans=Σμ[i]*(n/i^2) (i<=sqrt(n))记得开long long代码#include<iostream>#include<cstdio>#includ

2016-11-08 12:20:15 334

原创 bzoj 2132: 圈地计划 网络流

题目传送门分析很容易看出是用最小割来做,关键是要找出如何建图。 注意到如果不染色的话没那么好做,所以先把所有点黑板染色,s向黑点连流量为A[i,j]的边,白点向t连流量为B[i,j]的边。对于两个相邻的节点(x1,y1)和(x2,y2),分别从x向y和y向x连一条流量为C[x1,y1]+C[x2,y2]的边,然后跑最大流即可。代码#include<iostream>#include<cstdio

2016-11-07 14:49:05 311

原创 bzoj 3787: Gty的文艺妹子序列 分块+树状数组

题意给出n个数,要求资瓷单点修改和区间逆序对,强制在线。 n,m<=50000分析这题好劲啊!!!看到题就想起了bzoj 3744,只不过那一题没有单点修改。 bzoj 3744的做法是预处理ans[i,j]表示第i块到点j的逆序对数,sum[i,j]表示不大于i的数在前j块里面出现的次数。 但这题很明显不能这么干,因为维护ans和sum的复杂度太大。 那么我们考虑转换一下,设ans[i,j

2016-11-07 06:51:59 514

原创 bzoj 3720: Gty的妹子树 树分块

题意给出一棵n个节点的树,节点1为根节点,每个节点有一个权值,要求资瓷三个操作: 0 x y表示询问以x为根的子树内有多少个节点的权值大于y 1 x y表示将节点x的权值修改为y 2 x y表示插入一个新节点,其父节点为x,权值为y n,m<=30000分析看到这个数据范围如果是序列操作的话就毫不犹豫上分块了,但这是一棵树,所以一开始的想法就是用树剖或者主席树什么的搞一搞,但是插入操作太恶心

2016-11-06 10:20:28 425

原创 bzoj 3744: Gty的妹子序列 分块+树状数组

题意给出n个数,要求资瓷求区间逆序对,并要求强制在线。 n,m<=50000分析先把所有数离散化,这样就可以方便用树状数组啦。 然后分一波块。 然后我们在O(nn√log)O(n\sqrt nlog)的时间内预处理出两个数组: ans[i,j]表示第i块到第j个数之间有多少个逆序对。 sum[i,j]表示前j块里面有多少个数不大于i。 那么设现在要询问的区间为[l,r] 假如l和r在同

2016-11-05 21:22:52 376

原创 bzoj 2724: [Violet 6]蒲公英 分块

题意给出n个数,要求资瓷区间众数的查询。 n<=40000,m<=50000 强制在线分析这是栋爷所说的经典分块题。先把数字离散化,那么我们就可以开我们最爱的东西——桶。 把n个数字按照n√\sqrt n的大小分成n√\sqrt n块,并预处理一些东西: ans[i,j]表示第i块到第j块的众数是多少。 sum[i,j]表示数字i在第1块到第j块出现了多少次。 这两个数组都可以在O(nn

2016-11-01 20:05:56 296

原创 bzoj 2079: [Poi2010]Guilds 乱搞

题意有n个点和m条边,有两种颜色,问是否能满足每个点在染上一种颜色的同时和一个不同颜色的点直接相连。分析一开始想到了貌似是只要没有度为0的点就一定是TAK,否则就是NIE,但觉得并不会辣么水,于是就百度了一下,发现真的是这样……代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algo

2016-11-01 16:39:22 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除