自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【网络流24题】航空路线问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题我们首先要想明白的是飞机往返飞两次其实等价于两架飞机走一次,只要两架飞机的路线除出发点和结束点以外不重合即可。那么我们只要将每个点拆分成两个点,点与点之间连一条容量为1,起始点和汇点的容量为2的流即可。个人觉得最难的还是输出路径的问题,我用的方法是重新检索图中的边查看哪

2017-01-05 16:47:09 1226

原创 【网络流24题】餐巾计划问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题是一道很经典的网络流问题,我们可以发现餐巾的状态转移要么是在今天洗掉,要么是留到下一天洗掉,洗掉之后就变成可用的餐巾,那么我们只要把每天新产生的旧餐巾和每天需要用的新餐巾分开来看我们就能够得到一个单向的网络流的图,这样就可以完成这道题了。我们设x.a为第x天用出来的旧餐

2017-01-05 16:38:36 414

原创 【网络流24题】方格取数问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题我认为精髓就是将整个棋盘染色,使得相邻的两个格子染色不同,相信说到这里大家都知道怎么染了,就像很多地砖的染色一样,使得染色相间分布,这样一个棋盘就变成了一个二分图,一个格子和相邻的四个格子链接一条INF,每个格子向两边链接一条数字大小的边,跑一边最小割就行了。#incl

2017-01-04 07:07:59 504

原创 【NOIP 模拟赛】平均数 涂色游戏 序列题解

吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了。 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验思维,首先我们要二分出一个答案,然后关键是怎么检验答案的可行性,首先这数据范围我们肯定是要用nlogn的算法了,可是怎么做呢?树状数组?不可能!因为是小数,况且也没有办法用上树状数组。。。等等,真的

2017-01-03 21:28:54 544

原创 【网络流24题】试题库问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题的模型很显然,源点向每个试卷连接一条容量为1的边,每个试卷向对应的类型连接一条容量为一的边,每个类型向汇点连接一条容量为需要数量的边,跑一边最大流即可。#include<cstdio>#include<cstdlib>#include<iostream>#incl

2017-01-03 07:02:36 439 1

原创 【网络流24题】最长递增子序列问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题据说在codeforces上的数据变成了最长不降,但是本文附上的oj没有这种情况。 这道题的题意就是求出最长上升序列长度,然后每个数只能取一个的情况下最多有多少种方案能取出这么长的序列,第一个数和最后一个数无限多的时候能取出多少个。 首先第一问dp就可以了,而且数据

2017-01-02 20:59:53 975

原创 【网络流24题】圆桌问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题的模型应该是有一种专业名称的,但是那都没用,思路才是最关键的。 我们从源点向每一个公司连接一条容量为公司人数的边,然后每个公司向所有餐桌连一条容量为1得边,每个餐桌向汇点连一条容量为餐桌人数上限的边,这样跑一边最大流,如果最大流等于所有公司的总人数之和,证明有解,反之无

2017-01-02 20:46:19 313

原创 【网络流24题】魔术球问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题真是一道好题! 我们可以这样想,每加入一个数就枚举这个数可以和哪几个数相互组合,这样的话我们就可以把问题转化为一个最小路径覆盖问题,算出最少需要几根柱子才能放满这几个数,显然答案具有单调性,但是这题比较特殊,二分会增大时间复杂度,相反,如果每次我们将答案增加一,在原先

2017-01-02 20:41:54 359

原创 【网络流24题】最小路径覆盖问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 这道题是一道经典的求一个有向无环图的最小路径覆盖,具体做法就是将一个点拆分为两个点然后跑二分图最大匹配即可,最后的答案就是总点数减去最大匹配数,同理,由于隶属于网络流24题采用网络流写法。 输出路径则只需要判断流过的流连边即可#include<cstdio>#include

2017-01-02 20:33:19 333

原创 【网络流24题】太空飞行计划问题

(网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过) 最大权闭合子图裸题,先将所有收益加起来,源点向每个方案连接一条收益的流,每个方案向对应需要的仪器连一条INF,每个仪器向汇点连一条花费的流。 输出方案只需要在最后的阻塞流中看还剩哪几个点就好了#include<cstdio>#include<cstdlib>#includ

2017-01-02 20:15:48 356

原创 【网络流24题】1.飞行员配对方案问题

二分图匹配问题,因为隶属于网络流24题,就用网络流写一下。 从源点向每个外籍飞行员连一条容量为1的流,每个外籍飞行员向可以配合的英国飞行员连一条容量为1的流,每个英国飞行员向汇点连一条容量为1的流,跑一边最大流即可。 (网络流24题大多需要spj,所以需要一个有spj的oj,本系列代码均在www.oj.swust.edu.cn测试通过)#include<cstdio>#include<cstd

2017-01-02 20:10:43 311

原创 BZOJ4514 [Sdoi2016]数字配对

一道费用流好题,因为跑费用流的时候每次选择的都是最大的流,所以在ans刚刚要小于零的时候统计出答案即可#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<iostream>#include<iomanip>#include<ctime>#include<cmath>#include<al

2017-01-01 19:51:19 269

原创 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 482

原创 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 644

原创 BZOJ 4698: Sdoi2008 Sandy的卡片

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

2016-12-30 19:39:24 15626

原创 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 389

原创 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 444

原创 BZOJ 1176 CDQ分治

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

2016-12-26 17:53:22 372

空空如也

空空如也

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

TA关注的人

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