摘要: "Luogu P2515" 这道题的题面与P2146有点像。一些不同地方就是P2146是无环的,这题是有环的。 很显然,如果有几个软件的依赖关系形成环,那么这几个软件就可以被看成是一个大软件,其价值和空间都是原先的总和。 那么,我们就可以利用Tarjan算法求强连通分量+缩点,最后加一个树上的背包就 阅读全文
posted @ 2019-11-11 15:21 Nanjo 阅读(123) 评论(0) 推荐(0)
摘要: "Luogu P1892" "Luogu P2024" 这两道一眼看过去很容易发现可以用并查集来做——但是当我们仔细阅读题面后,会发现其实并没有那么简单。 我们知道并查集可以很轻松地维护具有传递性的信息,也就是“朋友的朋友就是我的朋友”这样的关系,但是普通的并查集并不能维护“敌人的敌人是朋友”这种关 阅读全文
posted @ 2019-11-09 23:06 Nanjo 阅读(134) 评论(0) 推荐(0)
摘要: "Luogu P3388" 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。 如果某个割点集合只含有一个顶点X(也即{X}是一个割点集合),那么X称为一个割点。 为了便于理解,我们可以从狭义上进行分析:对于一个连通无 阅读全文
posted @ 2019-11-09 09:38 Nanjo 阅读(111) 评论(0) 推荐(0)
摘要: "Luogu P2002" "Luogu P2341" 使用强连通分量算法缩点 第一题统计入度为0的个数强连通分量数。 第二题的答案为当且仅当仅有一个强连通分量的出度为0时该强连通分量的节点数,原因如下:若一个强连通分量出度为0,则说明这个强连通分量的喜爱无法对外传递;若有多个强连通分量出度为0,则 阅读全文
posted @ 2019-11-08 22:21 Nanjo 阅读(123) 评论(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 阅读(163) 评论(0) 推荐(0)
摘要: "Luogu P4779" 利用堆/优先队列快速取得权值最小的点。 在稠密图中的表现比SPFA要优秀。 阅读全文
posted @ 2019-11-06 14:53 Nanjo 阅读(166) 评论(0) 推荐(0)
摘要: "Luogu P2146" 由于对于每一个软件包有且只有一个依赖的软件包,且依赖关系不存在环。 很显然这是一个树形的结构。 再看题目要求的操作,安装实际上对应的是覆盖根节点到当前节点的路径,卸载则是覆盖该节点的整颗子树。 对于这样的操作,树链剖分+线段树可以很轻松地维护。 值得注意的是,根节点编号为 阅读全文
posted @ 2019-11-06 10:14 Nanjo 阅读(131) 评论(0) 推荐(0)
摘要: 树链剖分的基本思想是把一棵树剖分成若干条链,再利用线段树等数据结构维护相关数据,可以非常~~暴力~~优雅地解决很多问题。 树链剖分中的几个基本概念: 重儿子:对于当前节点的所有儿子中,子树大小最大的一个儿子就是重儿子(子树大小相同的则随意取一个) 轻儿子:不是重儿子就是轻儿子 重边:连接父节点和重儿 阅读全文
posted @ 2019-11-05 14:40 Nanjo 阅读(156) 评论(0) 推荐(0)
摘要: "Luogu P1972" 一开始非常naive随便打了个树状数组统计就交上去了,然后不出意料的爆零了…… 然后删一删改一改过了。 重点:对于区间[1,r]中重复出现的数,我们只需要关心最右边那一个是否在[l,r]中就可以了。 具体思路在代码注释中 cpp include include using 阅读全文
posted @ 2019-11-05 09:44 Nanjo 阅读(114) 评论(0) 推荐(0)