*------------BZOJ------------*
yashem66
长期提供绕地人造卫星清洗除尘服务。
展开
-
BZOJ1005 明明的烦恼 (prufer序列 组合数 高精度)
题目大意自从明明学了树的结构,就对奇怪的树产生了兴趣……给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?题解prufer序列有两个性质:表示大小为n的树的prufer序列的长度为n-2;树上的每个结点在prufer序列上出现的次数为“度数-1”。所以说限定了某些点的度数之后,问题就转化为了排列组合问题,在这里设m为未限定度数的结点的个数,left原创 2017-04-07 07:44:47 · 600 阅读 · 0 评论 -
BZOJ2251 外星联络 (Trie树)
题目大意给出一个01串,要求按照字典序输出在串中出现两次以上的子串的出现次数。题解我是在hzwer学长的后缀数组专题中看到这道题的,但是我并没有很理解黄学长的暴力是怎么思考的…于是我在另一个地方得到了另一种思路。首先要知道字串的性质:一个串的所有字串都可以表示为这个串某个后缀的某个前缀。换句话说,就是一个串的所有后缀的所有前缀都与这个串的子串一一对应。利用这个性质,这道题就可以写得很简短。所以,这道原创 2017-04-17 19:00:51 · 625 阅读 · 0 评论 -
BZOJ4429 Elementary Math小学数学 (二分图匹配)
题目大意给出n个数对,支持加减乘三种操作,输出一种方案使每一个式子的结果各不相同。如果没有方案的话输出impossible。题解因为每个方案中,每一个式子都能且只能对应一个值,所以说式子和值的关系是一一对应的。有因为每一个式子最多只能对应3个值,所以说空间和时间复杂度都允许。代码#include <cstdio>#include <iostream>#include <algorithm>us原创 2017-04-17 14:27:45 · 777 阅读 · 0 评论 -
BZOJ3307 雨天的尾巴 (树链剖分 线段树合并 dfs相关)
题目大意N个点,形成一个树状结构。有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品。完成所有发放后,每个点存放最多的是哪种物品。题解看到这道题之后我本能的想法就是位置线段树套权值线段树的,但是看了一下,这道题的时间限制和空间限制卡得都比较近,树套树卡起来应该是十分的困难的。这道题虽然是处理树上问题,但是我们先考虑如何处理这样的区间问题。 如果所有的操作和询问都是原创 2017-04-17 13:44:32 · 1211 阅读 · 0 评论 -
BZOJ4127 Abs (树链剖分 线段树)
题目大意给出一棵带权有根树,要求完成以下几种操作:1 u v d 表示将路径 (u,v) 加d (0<=d<=1e8) 2 u v 表示询问路径 (u,v) 上点权绝对值的和题解正常树剖,用线段树维护几个信息:绝对值的和,区间内负数的个数,区间内最大的负数 以及 最大的负数所在的位置,因为有区间加操作,所以还要维护一个加标记。这道题棘手的地方就在于,数字的正负性会随着区间加操作而改变,所以说不能原创 2017-04-14 14:56:53 · 1288 阅读 · 0 评论 -
BZOJ1858 序列操作 (线段树)
题目大意要求维护一个01序列,要求完成以下几种操作:0 x y 把区间[x,y]内的数字都变成0 1 x y 把区间[x,y]内的数字都变成1 2 x y 把区间[x,y]内的数字都异或1(取反) 3 x y 询问区间[x,y]内的数字1的个数 4 x y 询问区间[x,y]内最长连续数字1的个数题解线段数操作,因为有要完成操作4,所以要维护区间最左端和最右端的连续最长的长度。因为有取反操作原创 2017-04-13 15:35:58 · 1560 阅读 · 0 评论 -
BZOJ2258 文本校对 (Splay Hash 二分答案)
题目大意同bzoj1014,注意这里面的询问很鬼畜。要注意二分答案的上界的设定。题解题解见bzoj1014:读完题目我首先想到的是后缀数据结构,但是后缀数据结构并不支持修改操作。想了一会儿发现思路并不太对于是我就去翻了大爷的题解,发现是splay+hash+二分答案。大体思路就是用splay结构维护这个字符串,并且在每一个结点维护子树字符串的哈希值。由于询问操作的答案具有单调性,所以可以用二分答案解原创 2017-04-12 09:17:08 · 558 阅读 · 0 评论 -
BZOJ1269 文本编辑器 (Splay)
题目大意: 维护一个文本编辑器,支持下列操作: 1.将光标移动到某一位置 2.在光标后插入一段字符串 3.删除光标后的一段字符 4.翻转光标后的一段字符 5.输出光标后的一个字符 6.光标– 7.光标++ ——PoPoQQQ题解Splay模板训练题,注意读入Insert之后要读入一个回车(多余字符),这道题bzoj给我发了一份错误的数据,导致原创 2017-04-11 18:57:26 · 494 阅读 · 0 评论 -
BZOJ1552/3506 robotic sort (Splay 离散化)
题目大意区间长度为n,操作n次,在第i次操作的时候找出区间中第i小的元素的位置pos并翻转区间[i,pos],并输出位置pos。对于键值相同 的元素,初始位置靠前的优先翻转。题解splay裸题,每次维护最小元素键值和最小元素的指针。代码#include <cstdio>#include <iostream>#include <algorithm>using namespace std;cons原创 2017-04-11 13:49:37 · 972 阅读 · 0 评论 -
BZOJ3323 文艺平衡树 (splay 绿色无毒模板)
题目大意您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 。题解splay裸题,维护子树翻转信息即可。代码:#include <cstdio>#include <iostream>using namespace std;struct Node { int原创 2017-04-10 18:12:19 · 475 阅读 · 2 评论 -
BZOJ1012 最大数maxnumber (线段树)
题目大意现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始原创 2017-04-07 11:46:44 · 583 阅读 · 0 评论 -
KD Tree 新知选作(BZOJ 2850)
什么是KDrree一些优质入门文章在这里附上两篇笔者学习kdtree的思路和详细实现思想的优质文章:思路篇传送门 详细篇传送门同时鸣谢为笔者耐心讲解kdtree的神犇:mima_reincarnation笔者对KDtree的理解应用 在去年的ACM/ICPC的青岛赛区,有一道金牌题就是KDtree题,但在此之前某人曾立下flag“应该不会考的吧,但是考了就GG”。主要用于解决kNN问题,平面上距离原创 2017-01-07 20:41:54 · 1277 阅读 · 0 评论 -
网络流 最大流问题入门选作 (POJ1273,BZOJ1711)
算法对于网络流的最大流问题,笔者比较偏向于使用Dinic算法(其实是因为笔者实在是弱只会一种最大流算法),所以接下来的两题使用的都是Dinic算法。为了方便入门(或是自己以后回忆),在此介绍一下Dinic算法的流程: 1. 进行一次bfs,并确定是否还有能够从源点S到汇点T的流,如果有的话,进入步骤2,否则跳至步骤4; 2. 进行一次增广操作,并将流过的边的可用流量减去流过的流量,同时建一条流量原创 2017-01-05 14:52:10 · 297 阅读 · 0 评论 -
BZOJ4327 玄武密码 (AC自动机)
题目大意给出一个母串和一些特征串,询问字串能在母串中匹配的最长的前缀的长度。题解将特征串一一插入AC自动机并构建fail指针,这样母串匹配的时候走过的路径上的点所代表的前缀就都是可匹配的了。所以把所有的特征串插入AC自动机后构造fail树,然后把母串在AC自动机上跑一下并在可匹配的点上留下标记就可以了,这里要注意标记一定要顺着fail指针传上去一并打上标记,否则可能会遗漏。然后对于每一个特征串,从叶原创 2017-04-20 16:11:22 · 1191 阅读 · 0 评论 -
BZOJ4241 历史研究 (分块 回滚莫队-教程向)
题目大意给定一个长度为nn的序列,并提出qq个询问,每次询问要求回答区间 [l,r][l,r] 内所有的权值与其出现次数的积的最大值。题解看见这种xjb询问的题当然是要下意识地用分块来搞一搞的,又因为只有询问,且题目没有要求强制在线,所以就可以理所应当地“分块+莫队”来搞这道题了。对于这道题,莫队的加入操作是很好实现的,只要增加一下被加入区间的权值的出现次数并同时更新一下答案就可以了,但是删除操作却原创 2017-06-20 23:01:45 · 1752 阅读 · 2 评论 -
BZOJ1007 水平可见直线 (单调栈 直线判交)
题目大意给出n条直线,表示成y=Ax+B的形式(|A|,|B|<=500000),且n条直线两两不重合.求出所有可见的直线。可见的定义为从y为无穷大的地方往下看可见,既未被其他直线完全覆盖。题解把所有的直线按k递增为第一关键字,b递减为第二关键字排序。因为所有可见的直线一定能组成一个类似下凸的形状。然后逐个压入栈中,压栈之前把这条直线能覆盖的直线都弹出,既只要这条直线与sta[top-1]的交点在s原创 2017-04-07 08:42:52 · 629 阅读 · 0 评论 -
BZOJ1009 GT考试 (DP 矩阵乘法优化)
题目大意阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。他的不吉利数学A1A2…Am(0<=Ai<=9)有M位,不出现是指X1X2…Xn中没有恰好一段等于A1A2…Am. A1和X1可以为 0题解DP,设状态f[i][j]为:长度为i的串 的后缀 至多与不吉利数字的前j位匹配 的串的个数。则对于每一个状态j,加上相同的数字ch都会原创 2017-04-07 10:56:32 · 482 阅读 · 0 评论 -
BZOJ1014 火星人prefix (splay 哈希 二分答案)
题目大意给定一个字符串,要求可以完成以下三种操作:I pos ch 在pos这个位置之后插入字符ch;R pos ch 将pos这个位置的字符换为ch;Q x y 查询从x开始的后缀和从y开始的后缀的LCP(最长公共前缀)。题解读完题目我首先想到的是后缀数据结构,但是后缀数据结构并不支持修改操作。想了一会儿发现思路并不太对于是我就去翻了大爷的题解,发现是splay+hash+二分答案。大体思原创 2017-04-09 15:16:48 · 554 阅读 · 0 评论 -
BZOJ1015 星球大战starwar (并查集)
题目大意给出一个n个点m条边的无向图,分k次删掉k个不同的点。每删掉一个点,这个点所连的边就会消失、无效。题目要求每次删点之后输出图中联通块个数。题解因为没法直接维护图中联通块个数并同时进行删点操作,所以可以将询问离线处理,把删点变成加点,每次加点都用并查集维护联通块个数就可以了。代码#include <cstdio>#include <iostream>using namespace std;原创 2017-04-10 08:07:55 · 452 阅读 · 0 评论 -
BZOJ1001 狼抓兔子 详解 (平面图 spfa)
题目大意:求网格图的最小割。题解:把平面图中的每一个面积块转化为一个结点,并在网格外的面积块中分出两个面积块分别作为S和T,spfa求出的最短路即为最小割。因为只要选择了一条联通的S-T路径,图一定被割为两部分。update! 把图建好之后应该是这样的,每条新边(彩色边)的边权就是它割开的原图中那条边的边权。如果选择了一条从S到T的路径(如图中浅绿色路径所示),那么就相当于选择了一些原图中的边并将原创 2017-04-06 16:15:27 · 890 阅读 · 0 评论 -
BZOJ2002 弹飞绵羊 (LCT)
题目大意要求维护一棵有根树,支持断开一条边并加入一条边,查询到根的距离。题解LCT维护即可,注意是有根树,link和cut之前不能move_root否则会tle。代码#include <cstdio>#include <iostream>using namespace std;const int maxn=int(2e5)+111;int n,m;int p[maxn];struct Nod原创 2017-04-14 08:04:00 · 635 阅读 · 0 评论 -
BZOJ1002 轮状病毒 (DP 高精度)
题目大意求给定点数的最小生成树的个数。题解看到大家的题解中都用到了基尔霍夫矩阵,但是我用的是不太主流的一种dp。既把环处理为两部分,对于一条完整的链进行dp,对于另一部分用乘法原理进行统计。题解:http://z55250825.blog.163.com/blog/static/150230809201411692636459/代码:#include <cstdio>#include <iostr原创 2017-04-06 16:19:31 · 584 阅读 · 0 评论 -
BZOJ3676 回文串 (回文树)
题目大意考虑一个只包含小写拉丁字母的字符串ss。我们定义ss的一个子串tt的“出 现值”为tt在ss中的出现次数乘以t的长度。请你求出ss的所有回文子串中的最 大出现值。 题解回文树裸题,但是这里要注意一定要在最后统一推标记,否则全1串的时候一定会TLE。 这里附上一个写得很好的回文树讲解 回文树介绍(Palindromic Tree)代码#include <cstdio>#inclu原创 2017-05-01 10:05:24 · 748 阅读 · 0 评论 -
BZOJ1013 球形空间产生器sphere (高斯消元)
题目大意有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。题解以二维为例,设圆心坐标为 x0x0 和 y0y0,若有两点的坐标(x1x1 , y1y1)、(x2x2 , y2y2),则有以下关系:(x1−x0)2+(y1−y0)2=(x2−x0)2+(原创 2017-04-10 10:08:30 · 348 阅读 · 0 评论 -
BZOJ1008 越狱 (快速幂)
题目大意给出序列长度n和颜色数m,求出存在相邻元素颜色相同的染色方案数。题解正难反易 因为正向解决这个问题比较困难,所以我们可以将问题转化为求出不存在相邻元素颜色相同的染色方案数,然后用所有排列的情况减去。对于序列中的每一个人,只要和前一个人的颜色不同就可以了,所以共有m-1种选择。对于第一个人无论选什么颜色都可以,那么就有m种选择。所以ans=m^n-m*(m-1)^(n-1)。代码#inclu原创 2017-04-07 08:51:46 · 419 阅读 · 0 评论 -
BZOJ1004 Cards (burnside dp 扩展欧几里德)
题目大意有三种颜色的卡片分别sa,sb,sc张,并给出m种相等的置换方式,求所有本质不同的排列方式。题解:根据burnside引理,本质不同的排列数(ans)=sigma(Zi)/m。其中Zi表示对于第i种置换,无论怎么置换,置换几遍都相同的排列的个数,既不动点的个数。根据Polya定理可知,对于某个置换的某个循环节,循环节内所有的元素都相同的排列可称为一个不动点。由于有sa,sb,sc的约束,所以原创 2017-04-06 17:07:42 · 349 阅读 · 0 评论 -
BZOJ1003 物流运输 (DP spfa)
题目大意给出m个点e条带权边,在n天内每天从1到n走一遍,边权即为代价,每次更换线路需要k点代价,问最小的代价。题解考虑到数据范围很小,可以先预处理出所有时间区间内的从1到n的最短路的长度dis[i][j],然后进行dp。初始状态: f[i][j]=dis[i][j] dp方程为: f[i][j]=min(f[i][k-1]+f[k][j]+K) (i代码:#include <cstdio>#i原创 2017-04-06 16:24:06 · 504 阅读 · 0 评论 -
网络流 费用流选作 (BZOJ1877)
算法处理最小费用最大流问题时,笔者最经常使用的算法是连续最短路算法。比较符合笔者很弱的代码能力,而且理解起来较为简单。因为边的描述中多了权值这一元素,所以在建图的时候应该与最大流算法有些微小的差异。相同的地方是,两种问题都需要建反向边且反向边的流量都是0,对于边的权值,我们将反向边的权值设为正边的权值的相反数。连续最短路算法的流程如下: 1. 用spfa找出图中所有可行路径(不包含流量为0的边的路原创 2017-01-05 15:13:20 · 237 阅读 · 0 评论