02 2018 档案

摘要:题目大意 给出一段序列,一个长度一定的窗口从左到右滑动。求窗口滑动到每个位置时窗口内数字的最大值、最小值各是多少。n<=1e6。 总体思路 遇到这种对一个沿着一个方向滑动的区间求最值问题,可以运用单调队列优化。以求最小值为例。对整个序列构造一队列维护元素的下标,供多个窗口重复使用。设窗口左右端点各为 阅读全文
posted @ 2018-02-28 17:13 headboy2002 阅读(123) 评论(0) 推荐(0)
摘要:题目大意 有N个骑士,给出某些骑士之间的仇恨关系,每次开会时会选一些骑士开,骑士们会围坐在一个圆桌旁。一次会议能够顺利举行,要满足两个条件:1.任意相互憎恨的两个骑士不能相邻。2.开会人数为大于2的奇数。若某个骑士任何会议都不能参加,那么就必须将他踢出,给出骑士之间的仇恨关系,问最少需要踢出多少个骑 阅读全文
posted @ 2018-02-26 00:08 headboy2002 阅读(153) 评论(0) 推荐(0)
摘要:题目大意:一个有源有汇的城市,问最少增加城市中的多少道路可以增加源到汇上各个路径上可容纳的总车流量增加。 网络流关键割边集合指如果该边的容量增加,整个网络流图中的任意从原点到汇点的路径的流量便可增加。 从源点开始遍历未满流的边,这些边两端节点的集合称为S;同理再从汇点开始遍历,集合称为T;其余的点组 阅读全文
posted @ 2018-02-25 12:09 headboy2002 阅读(105) 评论(0) 推荐(0)
摘要:题目大意:问一个图至少加多少边能使该图的边双连通分量成为它本身。 图的边双连通分量为极大的不存在割边的子图。图的边双连通分量之间由割边连接。求法如下: 注意:如果一个边是割边,则其反向边也是割边。 阅读全文
posted @ 2018-02-25 11:39 headboy2002 阅读(123) 评论(0) 推荐(0)
摘要:题目大意:问一个有向图是否任意两点在两个方向上互相连通。 有向图强连通分量定义:如果一个图中的任意两点在两个方向上都互相连通,则该图为强连通图。极大强连通图为有向图的强连通分量(注意是极大,不是最大。一个图会有多个强连通分量)。感性理解,强连通图就是多个环,或者一个点连接在一起所产生的图。 如何求? 阅读全文
posted @ 2018-02-24 14:55 headboy2002 阅读(141) 评论(0) 推荐(0)
摘要:题目大意:求以无向图割点。 定义:在一个连通图中,如果把点v去掉,该连通图便分成了几个部分,则v是该连通图的割点。 求法:如果v是割点,如果u不是根节点,则u后接的边中存在割边(u,v),或者v->Low所对应的节点就是u(即u->DfsN <= v->Low),图所分成的部分为v的子树与其它;如果 阅读全文
posted @ 2018-02-23 20:50 headboy2002 阅读(170) 评论(0) 推荐(0)
摘要:题目大意:求无向图的割边编号。 割边定义:在一个连通图中,如果删去一个边e,图便变成不连通的两个部分,则e为该图的割边。 求法:边(u,v) 不是割边,当且仅当边(u,v)在一个环内。因此所有不在环内的边就是割边,我们要找到它。对图进行Dfs,对每个节点盖上时间戳DfsN,Dfs的方式形成了一棵搜索 阅读全文
posted @ 2018-02-23 20:32 headboy2002 阅读(106) 评论(0) 推荐(0)
摘要:正解:SPFA+DP 将POJ3463中maxDist(Target)由minDist(Target)+1改为minDist(Target+K)即可。判断0环,需要对每个节点建立下标为maxDist-minDist的Vis数组,若其被重复访问,则有0环,无解。 为何不能用Dijkstra? 本题有0 阅读全文
posted @ 2018-02-23 11:44 headboy2002 阅读(134) 评论(0) 推荐(0)
摘要:题目大意:求两点间最短路与长度为最短路长度+1的路径的条数之和。 方法1:最短路径+DP 首先求出ST间最短路径,然后根据递归式记忆化搜索(因此还要构造反向图)。 我们知道到达终点的路径长度最长为maxDist(T)=minDist(T)+1,而与终点相连的节点的路径长度最长为maxDist(T)- 阅读全文
posted @ 2018-02-22 21:21 headboy2002 阅读(134) 评论(0) 推荐(0)
摘要:题目大意:求图的严格次短路。 方法1: SPFA,同时求单源最短路径和单源次短路径。站在节点u上放松与其向量的v的次短路径时时,先尝试由u的最短路径放松,再尝试由u的次短路径放松(该两步并非非此即彼)。 由u的最短路径放松: 由u的次短路经放松: 完整代码: #include <cstdio> #i 阅读全文
posted @ 2018-02-22 00:02 headboy2002 阅读(247) 评论(0) 推荐(0)
摘要:【倍增优化树上的暴力查询工作】 阅读全文
posted @ 2018-02-20 16:23 headboy2002 阅读(165) 评论(0) 推荐(1)
摘要:题目大意:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 整体步骤:1.使两个点深度相同;2.使两个点相同。 这两个步骤都可用倍增法进行优化。定义每个节点的Elder[i]为该节点的2^k(或者说是二进制中的1,10,100,1000...)辈祖先。求它时要利用性质:cur->Elder[ 阅读全文
posted @ 2018-02-20 11:00 headboy2002 阅读(185) 评论(0) 推荐(0)
摘要:题目大意:求一篇论文中每个单词分别在论文中出现多少次。 本题用AC自动机太慢,应该用Fail树将AC自动机中所有的Fail指针反向得到一个新树,这就是Fail树。对长度为x的字符串a和长度为y的字符串b,如果a是b的子串,则a可能与位于b[0,a],b[0,a+1],b[0,a+2]...b[0,y 阅读全文
posted @ 2018-02-19 16:46 headboy2002 阅读(135) 评论(0) 推荐(0)
摘要:题目大意:有N个由小写字母组成的模式串以及一个文本串T。每个模式串可能会在文本串中出现多次。你需要找出哪些模式串在文本串T中出现的次数最多。 对每个模式串建立一个Trie树。定义一个节点的Fail指针如下:如果节点x表示模式串a中字符a[i],x->Fail表示模式串b中字符b[j],则b[0,j] 阅读全文
posted @ 2018-02-19 14:27 headboy2002 阅读(132) 评论(0) 推荐(0)
摘要:题目大意:给出两个字符串s和p,其中p为s的子串,求出p在s中所有出现的位置。 p[0, i-1]中,若存在最长的相等的后缀与前缀,则next[i]为那个前缀的末尾位置的下一个位置。匹配时,如果p[i]!=s[j],因为p[0,i-1]中的后缀已经匹配成功,则把与其相等的前缀放在那个后缀的位置,也会 阅读全文
posted @ 2018-02-19 12:01 headboy2002 阅读(113) 评论(0) 推荐(0)
摘要:题目大意:地球与月球间有可容纳无限人的太空站,还有在太空站与星球间按周期行驶的、有固定容量的太空船,每一艘太空船从一个太空站驶往任一太空站耗时均为 1。地球上有一定数量的人,问所有人到月球最少需要多少天。 关键词:分层 最小费用最大流 最大流:把人群看作流。 分层:人们的最优选择会受到其位于哪一天的 阅读全文
posted @ 2018-02-19 10:09 headboy2002 阅读(107) 评论(0) 推荐(0)
摘要:题目大意:给定正整数序列x1,...,xn 。(1)计算其最长不下降子序列的长度s。(不一定是否连续)(2)计算从给定的序列中最多可取出多少个长度为s的不下降子序列。(序列内每一个元素不可重复)(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的不下降子序列。 关 阅读全文
posted @ 2018-02-19 09:13 headboy2002 阅读(132) 评论(0) 推荐(0)
摘要:关键词:最小费用最大流 题目大意:海底是个网格,每个网格边有一定价值的海底化石。每个路线可经过无限个机器人,但上面的化石只能采一次。机器人可沿网格边向东或向北移动。给定机器人起点和终点位置及所能容纳的机器人数,求能获得的最大价值。 网络流:把一个机器人运动的轨迹看作一个流量为1的流。 化石只能采一次 阅读全文
posted @ 2018-02-19 08:46 headboy2002 阅读(136) 评论(0) 推荐(0)
摘要:题目大意:在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,输出这些数之和的最大值。 思路:这种各个点之间互相排斥求最大值的题,往往需要利用上网络流最小割的性质。我们把方格中的所有数字都选上,看看把哪些格子抠掉,能使数值和的减少量最少。 阅读全文
posted @ 2018-02-14 23:44 headboy2002 阅读(167) 评论(0) 推荐(0)
摘要:【通过枚举的顺序,限定查询的范围,继而求和:用树状数组。】 阅读全文
posted @ 2018-02-14 12:00 headboy2002 阅读(159) 评论(0) 推荐(0)
摘要:【将元素之间的依赖关系转化为图来解决】 阅读全文
posted @ 2018-02-13 22:50 headboy2002 阅读(144) 评论(0) 推荐(0)
摘要:【算法受状态影响,加维】 阅读全文
posted @ 2018-02-13 15:25 headboy2002 阅读(150) 评论(0) 推荐(0)
摘要:关键词:树状数组 二维树状数组C中,X树状数组维护一个Y树状数组,C[x][y]表示点(1,1)至点(x,y)是否被翻转过。先操作X数组,再操作每个X所维护的Y数组。 注意:反转(x1,y1):(x2,y2)时,反转了(x2,y2)的前缀和(x1-1,y1-1)的前缀就行了?不!还要把(x1-1,y 阅读全文
posted @ 2018-02-13 09:47 headboy2002 阅读(195) 评论(0) 推荐(0)
摘要:树状数组实际上是个数组,维护一个区间,支持查询区间的前缀和,以及修改单点的值。 定义lowbit(x)=x&(-x),表示将x的二进制数只保留从右往左数的第一个1后的数字。 设树状数组为C,规定C[i]维护区间[i-lowbit(i)+1,i]的数字和。因此,要访问C[i]维护的区间的前一个区间,则 阅读全文
posted @ 2018-02-13 08:49 headboy2002 阅读(121) 评论(0) 推荐(0)
摘要:题目大意: 关键词:最小费用最大流 不相交路径 如果两个线段重叠了,那我们则把一个线段放在下一层,另一个线段放在上一层。把流量为1的流看作一条线,一条线把位于同一层的线段(互不重叠)都串了起来。最多有k层,则总流量最多为k。问题变成了:每条线如何串串出的线段的长度总和最大? 构图思路1:同一层每一线 阅读全文
posted @ 2018-02-12 15:23 headboy2002 阅读(110) 评论(0) 推荐(0)
摘要:关键词:二分匹配 本题用有上下界的网络流可以解决,但编程复杂度有些高。 每个类需要多少题,就设置多少个类节点。每个题节点向其所属的每一个类节点连一条边。这样就转化成了二分匹配问题。 阅读全文
posted @ 2018-02-12 10:35 headboy2002 阅读(127) 评论(0) 推荐(0)
摘要:关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树。 注意,以下代码没有PushDownX。因为如果要这么做,PushDownX时,由于当前X节点的子节点可能存在标记,而标记不能叠加,导致每次PushDownX时都要把子节点PushDownX一次。 阅读全文
posted @ 2018-02-12 09:32 headboy2002 阅读(561) 评论(0) 推荐(0)
摘要:关键字:线段树 可持久化 线段树:当版本(即对应的原序列的区间[1,r])一定时,每个节点的left,right下标为值域,值为其对应的原序列区间[1,r]中元素大小在值域中的元素个数。 可持久化:新版本(对应原序列[1,r])在旧版本(对应原序列[1,r-1])上建立,从树根向树叶构造,在旧版本的 阅读全文
posted @ 2018-02-10 10:56 headboy2002 阅读(141) 评论(0) 推荐(0)
摘要:网络流 拆点 上下界 枚举 阅读全文
posted @ 2018-02-09 12:23 headboy2002 阅读(148) 评论(0) 推荐(0)
摘要:【一个人走多次变为多个人走一次】 阅读全文
posted @ 2018-02-08 13:44 headboy2002 阅读(115) 评论(0) 推荐(0)