11 2019 档案

摘要:数组是一种单点修改,单点查询的基础数据结构。 如果要对数组改进,使之可持久化,那么显然我们需要利用其它的数据结构来改进它。 对于单点修改和单点查询两种操作,很容易发现可持久化线段树也是支持这种操作的。 所以,我们利用可持久化线段树来维护一个可持久化数组 阅读全文
posted @ 2019-11-30 13:56 Nanjo 阅读(127) 评论(0) 推荐(0)
摘要:"Luogu P3376" 最大流是网络流模型的一个基础问题。 网络流模型就是一种特殊的有向图。 概念: 源点:提供流的节点,类比成为一个无限放水的水厂 汇点:接受流的节点,类比成为一个无限收水的小区 弧:类比为水管 弧的容量:类比为水管的容量;用函数$c(x,y)$表示弧$(x,y)$的容量 弧的 阅读全文
posted @ 2019-11-30 11:29 Nanjo 阅读(453) 评论(0) 推荐(0)
摘要:"Luogu P1265" 本来一开始我用的Kruskal……但是由于double类型8字节,所以MLE了。 很容易发现这是一道最小生成树的题目。 值得注意的是题目中给的第二个限制,只存在唯一情况即这个环为等边多边形。 但是如果是等边多边形那么这个限制给了和没给完全没区别…… 所以这就是一道最小生成 阅读全文
posted @ 2019-11-29 14:04 Nanjo 阅读(117) 评论(0) 推荐(0)
摘要:"Luogu P3275" 显然是一道经典的差分约束系统 相关知识可以查看: "【Luogu 1993】差分约束系统问题——小K的农场" 值得注意的是这题使用最长路更合适,因为每一个人都要取得至少一个糖果。在添加超级起点时,这本身就是一个使用大于等于号的关系,如果更换成小于等于号则会导致边的方向改变 阅读全文
posted @ 2019-11-28 21:56 Nanjo 阅读(110) 评论(0) 推荐(0)
摘要:"Luogu P1993" 前置知识:最短路径相关算法 如果一个系统由n个变量和m个约束条件组成,形成m个形如ai aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统。 显然题目中给出的信息可以构成一个差分约束系统,虽然不等号的方向不统一,但是我们可以利用不等式的性质进行变换,将 阅读全文
posted @ 2019-11-28 20:35 Nanjo 阅读(155) 评论(0) 推荐(0)
摘要:"Luogu P3834" 可持久化数据结构就是支持在历史版本上进行查询和修改操作的数据结构。 主席树就是对线段树的改进,使之可持久化。 前置知识:动态开点线段树 我们利用权值(值域)线段树统计区间内的数出现的次数。 (权值线段树类似于线段树+桶) 那么我们可以对每一个位置建立一棵线段树,维护$1$ 阅读全文
posted @ 2019-11-28 16:53 Nanjo 阅读(111) 评论(0) 推荐(0)
摘要:"Luogu P2471" 啊啊啊啊这真是一道史上最毒瘤的题目!!!!! 题意就是给出n个年份的降雨量 询问:“自从$y$年以来$x$年的降雨量最大”的正确性。 显然有多种情况需要考虑,那么就需要通过分类讨论理清程序的逻辑了。 对于“自从$y$年以来$x$年的降雨量最大”这样一句话,可以转化成如下条 阅读全文
posted @ 2019-11-27 14:55 Nanjo 阅读(136) 评论(0) 推荐(0)
摘要:前置知识:欧几里得算法(辗转相除法) 裴蜀定理 裴蜀定理(或贝祖定理,Bézout's identity)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+ 阅读全文
posted @ 2019-11-25 14:06 Nanjo 阅读(432) 评论(0) 推荐(0)
摘要:"Luogu P1168" "Luogu P1801" "UVA 501(洛谷Remote Judge)" 前置知识:堆、优先队列STL的使用 对顶堆 是一种在线维护第$k$小的算法。 其实就是开两个堆,一个是大根堆,一个是小根堆。两个堆的根相对。 下面借助题目P1168进行详细分析。 P1168 阅读全文
posted @ 2019-11-24 22:19 Nanjo 阅读(155) 评论(0) 推荐(0)
摘要:"Luogu P3375" 模式串:即题目中的S2所代表的意义 文本串:即题目中的S1所代表的意义 对于字符串匹配,有一种很显然的朴素算法:在S1中枚举起点一位一位匹配,失配之后起点往后移动一位,从头开始进行匹配。 这种算法的时间复杂度几乎达到了$O(nm)$,显然是不能接受的。 这种做法的缺点在于 阅读全文
posted @ 2019-11-14 13:38 Nanjo 阅读(152) 评论(0) 推荐(0)
摘要:"Luogu P1967" 题目大意:给定一张图和q个询问,询问x节点和y节点的路径之间最小边权最大可以是多少。 可以发现对于一条边$E(x,y)$,如果x到y有另一条路径且最小边权大于$E(x,y)$,那么这条边完全可以不考虑了。 综上所述,我们可以考虑对这张图使用Kruskal构建最大生成树。 阅读全文
posted @ 2019-11-12 18:19 Nanjo 阅读(110) 评论(0) 推荐(0)
摘要:"Luogu P2515" 这道题的题面与P2146有点像。一些不同地方就是P2146是无环的,这题是有环的。 很显然,如果有几个软件的依赖关系形成环,那么这几个软件就可以被看成是一个大软件,其价值和空间都是原先的总和。 那么,我们就可以利用Tarjan算法求强连通分量+缩点,最后加一个树上的背包就 阅读全文
posted @ 2019-11-11 15:21 Nanjo 阅读(125) 评论(0) 推荐(0)
摘要:"Luogu P1892" "Luogu P2024" 这两道一眼看过去很容易发现可以用并查集来做——但是当我们仔细阅读题面后,会发现其实并没有那么简单。 我们知道并查集可以很轻松地维护具有传递性的信息,也就是“朋友的朋友就是我的朋友”这样的关系,但是普通的并查集并不能维护“敌人的敌人是朋友”这种关 阅读全文
posted @ 2019-11-09 23:06 Nanjo 阅读(139) 评论(0) 推荐(0)
摘要:"Luogu P3388" 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。 如果某个割点集合只含有一个顶点X(也即{X}是一个割点集合),那么X称为一个割点。 为了便于理解,我们可以从狭义上进行分析:对于一个连通无 阅读全文
posted @ 2019-11-09 09:38 Nanjo 阅读(112) 评论(0) 推荐(0)
摘要:"Luogu P2002" "Luogu P2341" 使用强连通分量算法缩点 第一题统计入度为0的个数强连通分量数。 第二题的答案为当且仅当仅有一个强连通分量的出度为0时该强连通分量的节点数,原因如下:若一个强连通分量出度为0,则说明这个强连通分量的喜爱无法对外传递;若有多个强连通分量出度为0,则 阅读全文
posted @ 2019-11-08 22:21 Nanjo 阅读(124) 评论(0) 推荐(0)
摘要:"Luogu P3387" 强连通分量的定义如下: 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图 阅读全文
posted @ 2019-11-08 19:00 Nanjo 阅读(413) 评论(0) 推荐(1)
摘要:"Luogu P1439" 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: 时空复杂度都为O(n^2^) 对于本题这种做法显然是无法接受的。 我们可以对这个题目进行转化。仔细看题,可以发现a,b两个序列都是1 n的排列。 那么,我们可以利用映射,将a中的数 阅读全文
posted @ 2019-11-07 11:23 Nanjo 阅读(166) 评论(0) 推荐(0)
摘要:"Luogu P4779" 利用堆/优先队列快速取得权值最小的点。 在稠密图中的表现比SPFA要优秀。 阅读全文
posted @ 2019-11-06 14:53 Nanjo 阅读(168) 评论(0) 推荐(0)
摘要:"Luogu P2146" 由于对于每一个软件包有且只有一个依赖的软件包,且依赖关系不存在环。 很显然这是一个树形的结构。 再看题目要求的操作,安装实际上对应的是覆盖根节点到当前节点的路径,卸载则是覆盖该节点的整颗子树。 对于这样的操作,树链剖分+线段树可以很轻松地维护。 值得注意的是,根节点编号为 阅读全文
posted @ 2019-11-06 10:14 Nanjo 阅读(134) 评论(0) 推荐(0)
摘要:树链剖分的基本思想是把一棵树剖分成若干条链,再利用线段树等数据结构维护相关数据,可以非常~~暴力~~优雅地解决很多问题。 树链剖分中的几个基本概念: 重儿子:对于当前节点的所有儿子中,子树大小最大的一个儿子就是重儿子(子树大小相同的则随意取一个) 轻儿子:不是重儿子就是轻儿子 重边:连接父节点和重儿 阅读全文
posted @ 2019-11-05 14:40 Nanjo 阅读(157) 评论(0) 推荐(0)
摘要:"Luogu P1972" 一开始非常naive随便打了个树状数组统计就交上去了,然后不出意料的爆零了…… 然后删一删改一改过了。 重点:对于区间[1,r]中重复出现的数,我们只需要关心最右边那一个是否在[l,r]中就可以了。 具体思路在代码注释中 cpp include include using 阅读全文
posted @ 2019-11-05 09:44 Nanjo 阅读(117) 评论(0) 推荐(0)
摘要:"Luogu P3379" 题意:对于两个节点,寻找他们的最近公共祖先。 一个显而易见的解法是对于每一个节点我们都往上遍历一遍,记录下它每一个祖先,然后再从另一个节点出发,一步一步往上走,找到以前记录过第一个节点就是这两个节点的LCA 事实上在这样的数据规模下,这种解法的时间复杂度是让人无法接受的。 阅读全文
posted @ 2019-11-05 07:46 Nanjo 阅读(118) 评论(0) 推荐(0)
摘要:"Luogu P1631" 题意很好懂,不作分析 很容易想出一个解法是求出每一个和,排序后取前n个。 当然这种做法妥妥的会MLE+TLE 我们会发现实质上这种做法的缺点在于存入了大量不需要的数据。 那么该怎么进行优化呢? 观察题目,易得下列关系 `a[1]+b[1] include include 阅读全文
posted @ 2019-11-03 20:24 Nanjo 阅读(96) 评论(0) 推荐(0)
摘要:"Luogu P1502" 题意很好理解,就是问给出的矩形套住的最大和。 但是做起来却十分麻烦。 ——来自疯狂爆10分的愤怒 一个比较高效的思路是——把每一个星星作为左下角向右上方拓展形成一个矩形, 拓展的规则为只要窗口的右上角在这个矩形之内,就可以覆盖到这个星星。然后用线段树维护一条扫描线从左往右 阅读全文
posted @ 2019-11-02 18:04 Nanjo 阅读(199) 评论(0) 推荐(0)
摘要:"Luogu P1714" 题目的大意就是给定一个长度为n的序列,求出这个序列中长度不超过m的子串的最大和 很容易想出的一个解法就是枚举起点终点,直接暴力扫一遍得出答案。 当然也很容易发现这种做法肯定会TLE。 也有一个很容易想到的优化方法——利用前缀和。 但是我们会发现即便如此,还是会TLE。 也 阅读全文
posted @ 2019-11-02 17:09 Nanjo 阅读(257) 评论(0) 推荐(0)