自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 BZOJ 4545: DQS的trie

一道后缀自动机的好题,综合了后缀自动机一些重要的操作。 对于询问一,我们边建树边维护。 对于询问三,我们用一个LCT来维护。 (记得开long longQAQ)#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>#include<iostrea

2016-12-30 19:50:17 483

原创 BZOJ 4327: JSOI2012 玄武密码

后缀自动机裸题。 借着这道裸题总结一下后缀自动机的查询问题。 1.查前缀 查询时不跳parent,遇到空节点就跳出。 2.查子串 查询时跳parent,记录最大ans. 3.查次数 LCT维护right数组 4.查不同的串的数目 在建树时维护,一个点对答案的贡献为this->max_len - this->parent->max_len#include<cstdio>#include<c

2016-12-30 19:46:31 645

原创 BZOJ 4698: Sdoi2008 Sandy的卡片

这道题看到加几个数就能变成另一个数就知道是差分啦,然后显而易见的就是最后的答案为所有串的最长公共串+1,那我们之后怎么办呢,我们先对所有串建一个广义后缀自动机,然后在自动机上搜寻每一个单词,对单词的每一个节点一直跳parent指针,路径上每一个点的次数加一,统计出所有访问次数为字符串总数的长度最大值就好啦,为了不重复访问,我们将每一个点弄一个标记,为了防止繁琐的清空操作,弄一个时间戳就好啦。我这个傻

2016-12-30 19:39:24 15640

原创 BZOJ 2555: SubString 后缀自动机+LCT

后缀自动机的经典模型,查询一个字符串出现了几次,我们可以联想一下在代码中并未体现的right数组,我们很容易发现,有几个right数组就代表着这个单词出现了几次,那么我们只要设法维护出来就好了,我们可以想到加一个单词在parent树中只对这个单词所在的链有影响,所以我们只要维护一个LCT把parent树维护出来就行了,每次新加节点将parent树对应的链的right+1就行了(据说这题不用LCT更快

2016-12-30 18:33:18 399

原创 BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡

这道题首先要读明白题,就是说叶子节点不超过20个,那么我们就可以以每一个叶子节点为根建一个广义后缀自动机,这样就一定能表示出来所有的子串,然后统计一下答案就可以啦。 (广义后缀自动机就是把好多串放到一块,每次都从root开始建后缀自动机,但由于这道题是一棵树,所以我们只需先把节点开出来,在dfs的过程中在dfs的出发点之后新插入一个字符)#include<cstdio>#include<cstd

2016-12-30 18:25:10 387

原创 BZOJ 4516: [Sdoi2016]生成魔咒

后缀自动机的基础应用:计算不同的子串个数。我们只需要将每个点的max_len-min_len+1的和维护一下就行了,这里要引进一个结论,就是一个节点的min_len==其parent节点的max_len+1,具体怎么证我就不说了,总之代入之后就将公式变为了this->max_len - this->parent->max_len,这样就可以在建后缀自动机的时候顺道维护出来答案了。#include

2016-12-30 18:18:08 359

原创 BZOJ2946: [Poi2000]公共串

第一次写后缀自动机,好激动,参照了Po姐的写法,这道题我们只需将第一个串建立后缀自动机,然后其他的串在上面跑就可以了,找到一个最长的n个串都经过的子串就可以了(后缀自动机真快啊)#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>#include<i

2016-12-30 18:11:37 362

原创 BZOJ 2631: tree Link_Cut_Tree

一道Link_Cut_Tree裸题,只要998,模板带回家#include<cstdio>#include<cstdlib>#include<iostream>#include<iomanip>#include<cstring>#include<string>#include<ctime>#include<cmath>#include<algorithm>using namespa

2016-12-28 21:56:12 305

原创 BZOJ 2754: [SCOI2012]喵星球上的点名 后缀数组

听说这道题后缀数组暴力就能过,那我也就没写那些鬼畜的算法,将所有字符串粘合在一起,处理出来后缀数组然后暴力扫一遍即可。#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>#include<iostream>#include<iomanip>#in

2016-12-28 19:32:24 445

原创 BZOJ 2251: [2010Beijing Wc]外星联络 Trie树

这道题本来以为时后缀数组,后来注意到单词不长,那就可以直接用Trie树了,记录一下每个点经过的次数,最后扫一遍Trie树就行了#include<cstdio>#include<cstdlib>#include<ctime>#include<cmath>#include<cstring>#include<string>#include<iostream>#include<iomanip>

2016-12-28 19:28:44 339

原创 BZOJ 3238: [Ahoi2013]差异 后缀数组

卡时过得,感觉自己用错方法了,算了,练练后缀数组也是挺好的。 我们只需要求出height数组之后跑一边单调栈就能知道以每一个点为最小值能扩张的最远的区间,用总的值减去2*左边的个数*右边的个数*height[i]就可以了 [注意] 1.为了防止区间发生重叠,向左面扩展时相同不扩展,向右面扩展时相同也扩展 2.要弄清楚height的具体含义,搞清边界问题#include<c

2016-12-28 19:25:39 429

原创 BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组

一道后缀数组模板题,拿来练练后缀数组(Po姐的模板强无敌),将字符串复制一遍然后求一下后缀数组将所有编号小于等于n的提出来就好啦#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<iomanip>#include<algorithm>#include<ct

2016-12-28 19:18:19 407

原创 BZOJ 2434: [Noi2011]阿狸的打字机 AC自动机 fail树

一道AC自动机好题啊,做完了以后对AC自动机有了一个新的认识,首先由于这道题的特殊性我们无需一个一个字符串插入,只要维护一个father指针往回跳就行了,建好树了以后怎么办呢,我们可以想到A在AC自动机上是B的子串当且仅当B的节点跳fail指针可以跳到A,但是这样时间复杂度太大,由于fail指针总是由下向上指所以我们能想得到如果将fail倒过来那么将形成一颗树,我们称之为fail树,那么B的节点跳f

2016-12-28 19:14:46 359

原创 BZOJ 1212: [HNOI2004]L语言 AC自动机

Description标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。 一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。 我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。 例如字典D中包括单词{‘is’, ‘name’, ‘what’, ‘

2016-12-28 18:52:14 390

原创 BZOJ 1030: [JSOI2007]文本生成器 AC自动机

给出N个由大写字母组成的字符串,再给出一个长度M 求有多少个由大写字母组成的长度为M的字符串满足“至少包含这N个字符串中的一个” A包含B指的是,B是A的子串 答案对10007取模N<=60,每个字符串的长度<=100,M<=100解析:这道题正着想显然是有点难,那我们就倒过来,用所有可能的文章总数减去不包含给定字符串的数量。 设F[i][j]表示匹配前i个字母之后走到了AC自动机的j号节点

2016-12-28 18:48:22 403

原创 BZOJ 2938: [Poi2000]病毒 AC自动机

Description二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病

2016-12-28 18:41:07 299

原创 HDU 2222 AC自动机模板题

这道题真的是不想说什么了,数组没开够tmd报TLE,艹,白浪费老子一个小时的大好时光_________________________________ 这道题建出ac自动机之后顺着next指针跳(代码中用fail直接代替了),每个点都加上一个标记只能算一次就完事了QAQ#include<cstdio>#include<cstdlib>#include<cstring>#include<str

2016-12-27 21:16:28 398

原创 BZOJ 3786 星系探索 splay维护dfs序

一开始看到子树操作想要树剖,但是仔细想想之后发现树剖没有办法维护一个点到根节点的距离,而且无法维护对应关系,后来就想到了使用dfs序,这样只要维护前缀和就可以快速求出一个点到根节点的距离,由于有换边操作,所以我们要使用splay维护,这道题要注意一个细节,就是每次想要提取出来一个区间需要先找到这个区间的前驱后继,都做完以后这题就能过啦#include<cstdio>#include<cstdlib

2016-12-27 14:48:05 482

原创 BZOJ 1711 网络流

将每个牛拆成两个牛,连一条流量为1的边,就能保证每个牛只选择一次,从源点向每一个饮料连一条容量为1的边,每个食物向汇点连一条容量为1的边,然后一只牛就表示为它喝的饮料向他自己连一条边,他自己再向吃的食物连一条边,跑一个最大流#include<cstdio>#include<cstdlib>#include<ctime>#include<cmath>#include<iostream>#in

2016-12-27 09:37:56 415

原创 BZOJ 1497 最大权闭合子图

这算比较裸的一道最大权闭合子图了,从源点向每个用户连一条容量为收益的边,每个用户向自己用的通讯站连一条INF,每个通讯站向汇点连一条修建费用的流,所有收益减去最小割就好啦#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<string>#include<cstring>#include<iostr

2016-12-27 09:15:45 424

原创 BZOJ 3438 最大权闭合子图

题目大意:一些作物种在A地里会获得Ai的收益,重在B地里会有Bi的收益,如果一些作物种在一起还会获得额外的收益。 看到这样好几种选择只能选择一种的题就应该想到最小割,我们将每一个作物向A地连一条容量为Ai的流,向B地连一条容量为BI的流,然后再将每一个组合新建一个节点,从A地向其连接一条容量为收益的流,这个点组合内每一个点连一条容量为INF的流,组合和B地的连法同理,将所有收益加在一起减去最小割就

2016-12-27 09:04:50 447

原创 BZOJ 1877 最小费用流

一道最小费用流裸题 为了防止一个点被选择两次,将一个点拆分为两个点,然后正常建图跑一边最小费用流#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<ctime>#include<algorithm>#include<

2016-12-27 08:55:19 296

原创 BZOJ1070 最小费用流

这道题的思路真是神,万万没想到,给出题人跪了orzorz 我们首先要想明白的是一个人修车对答案的影响是什么,假设一个人是一个技术人员倒数第一个修车,那么它对答案的影响就是修车时间,如果是倒数第二个那么对答案的影响就是2*修车时间,以此类推,所以我们将一个技术人员拆分成m个,代表一个技术人员倒数第几次修车,让这些点分别向所有车连一条容量为一,费用为t[i][j]*k的流,从起点向每一个拆分出来的点连

2016-12-27 08:50:59 335

原创 BZOJ 3781 莫队算法

一道莫队算法裸题,其中分块的步骤是和Po神学的,将2^7分为一块#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<algorithm>using name

2016-12-27 08:33:59 343

原创 BZOJ 1951 古代猪文 鲁卡斯定理+费马小定理+中国剩余定理

先给这道题的题目描述跪了(此处吐槽10分钟) —————————————————————————— 吐槽完毕,这道题首先看得出要算的结果是一个数的巨大无比次方,简单的快速幂显然不行了,但是最后的结果要mod一个质数,于是我们可以引入费马小定理: a^(p-1)≡1(mod p)(当p为质数并且a不为p的倍数时成立),这能说明什么呢,就是说在mod p的意义下乘以一个数的p-1次方等于没乘!所以

2016-12-26 23:05:13 546

原创 BZOJ 1857 三分

这道题比较玄学,我查了很多题解也没有一个能明确给出答案单峰的原因,这题应该用三分套三分,第二层的三分很好想,只是第一层没有明确的证明,第一次写三分,心累啊。#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<ctime>#include<string>#i

2016-12-26 20:12:44 502

原创 BZOJ 2683 CDQ分治

题解同BZOJ 1176 简直一毛一样#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<algorithm>using namespace std;#d

2016-12-26 18:00:03 445

原创 BZOJ 1176 CDQ分治

光看数据就知道二维数据结构肯定搞不了了,看一眼询问次数就知道离散化也不行,所以就要用一种新的办法——CDQ分治,具体做法如下:将所有询问按照x,y坐标排序,利用CDQ分治的思想,按时间顺序分为左右两半,然后处理左边对右边的影响,用树状数组维护当前点包括它上面所有行的数值的和,将一个询问拆成4个,这道题就可以了#include<cstdio>#include<cstdlib>#include<cm

2016-12-26 17:53:22 372

原创 BZOJ 3675 斜率优化DP

题目描述就不说了,自己看BZOJ吧 这道题首先要想明白一个问题,就是一个序列先切和后切获得的得分是一样的,就像要把一个序列分为abcd四块,先ab|cd和先a|bcd获得的结果相同,所以这道题就可以写一个dp了,dp方程为 F[i][k]=F[j][k-1]+sum[j]*(sum[i]-sum[j]) 再看一眼数据,n=100000显然正常dp搞不了,所以就要写一个斜率优化,具体式子就不写了

2016-12-26 14:26:57 484

原创 BZOJ 2738 矩阵乘法 整体二分+二维树状数组

先吐槽一下这道题的题目———————- 这道题要求出所有询问的解并且所有问题的解都具有单调性,所以我们很容易能想出来这道题应该要整体二分,这道题的瓶颈是如何快速统计出来一个数到底在区间内排第几,其实看到矩形我们就应该想到树状数组,将所有大于当前二分答案的格子设为1,其余设为零,用树状数组求和,就可快速判断满不满足当前解为第K大,另外还可将所有点按照V值排序,这样每次二分出一个新的答案就可从之前的位

2016-12-26 10:04:51 466

原创 BZOJ 3159 决战 (splay+树链剖分)

题意:给出一棵树,(1)路径加一个值;(2)路径上的节点的值反转(只是值反转,不是节点反转);(3)询问路径最大值 最小值 和。 解题思路: 题目简单,代码冗长 写这道题的时候还没有学LCT,所以我写了一种非常奇葩的方法,纯splay+树链剖分,代码冗长,但我觉得还挺好理解的。 首先我们可以先对整棵树进行树链剖分,分出轻重链之后就可以将一条链分解成若干条重链,用splay维护剖分出来的序列,

2016-12-09 21:52:44 683 1

空空如也

空空如也

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

TA关注的人

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