随笔分类 - 模板
摘要:树的重心: 1 #include <cstdio> 2 #include <algorithm> 3 4 const int MAXN = 1e5; 5 const int INF = 0x3f3f3f3f; 6 7 int n; 8 int head[2 * MAXN + 10], numEdge
阅读全文
摘要:前言: 设 $vis_i$ 表示第 $i$ 个点是否更新过其他点; 设 $dis_i$ 表示从起点 $s$ 到达第 $i$ 个点的最短距离; 设 $sdis_i$ 表示从起点 $s$ 到达第 $i$ 个点的严格次短距离; 设 $dis(u,$ $v)$ 表示第 $u$ 个点到达第 $v$ 个点的距离
阅读全文
摘要:序列操作 单点加,前缀和查询: 树状数组直接维护即可。 区间加,单点查询: 设原数组为 $a[i]$ ,并更新一个数组 $c[i]$ $=$ $a[i]$ $-$ $a[i$ $-$ $1]$即为差分数组; 每次区间 $(l,$ $r)$ $+$ $x$ 直接$c[l]$ $+$ $x$,c[r +
阅读全文
摘要:求二分图的算法——匈牙利 例题: https://www.luogu.org/problem/P3386 思路: 首先二分图是一个求一堆东西(例如狗),喜欢一些东西(例如肉),但是他们喜欢的肉不同,求最大限度能满足多少条狗的问题。那么我们可以画一个图,把狗放在一侧,把肉放在一侧。 如果第i只狗, 喜
阅读全文
摘要:求最小生成树的算法——Kruskal 思路 :先把所有的边排个序,然后枚举所有的边(从小到大),如果当前边所连的两个点并没有在同一个集合里(这一可以用并查集来实现)(需要判断两个点是否已经连通,如果已经连通了,那么再用这条边连一遍就没有什么意义了),就连上这条边了。如果已经连了n - 1条边(n -
阅读全文
摘要:求LCA的算法——树上倍增 例题 : https://www.luogu.org/problem/P3379 算法: 首先我们能想出一种暴力算法:先把深度高的点跳到和深度低的点的同一层,然后他们俩一起往上跳,如果两个点相遇了,当前点就是他们的最近公共祖先。但可惜会超时,于是我们考虑一下优化。 优化:
阅读全文
摘要:例题: https://www.luogu.org/problem/P4782 算法: 算法所求问题: 这个算法主要是求有n个人,每个有m个要求,要求只可能是1或0的情况(及是或不是,要或不要......),且每个要求只需满足其一即可,求是否有可行的分配方案(当然,也可以求出那个可行的分配方案) 算
阅读全文
摘要:求最小生成树算法——Prim 例题: https://www.luogu.org/problem/P3366 算法: 时间复杂度 : $O(n^2)$ 算法主体思想: $\text{Prim}$ 算法主要是用到贪心的思想,假设我们有两个集合 $A$ 和 $B$,$A$ 集合表示最小生成树集合(及 $
阅读全文
摘要:序列动态规划 一. 关于最长上升/下降/不上升/不下降子序列 题目大意 :给定一个序列,求当前序列中最长上升/下降/不上升/不下降子序列(序列可以不连续) 注 :以下算法皆由最长上升子序列展示 1. Ο(n2) 思路 :f[i]表示以q[i]结尾的最长上升子序列的长度,初始值为1。每次循环1 ~ n
阅读全文

浙公网安备 33010602011771号