算法
文章平均质量分 78
sharp_legendgod
这个作者很懒,什么都没留下…
展开
-
最小链覆盖 Dilworth’stheorem
话说这个专题网上的讲解都没有很全,窝就将他们的总和一下。如果有问题请私信,评论。首先说一下最小链覆盖定理,这个本质上是有点抽象的。偏序集\color{red} \text{偏序集}偏序集的概念:我们设当前的全集为 XXX。也就是一个 偏序集\color{red}\text{偏序集}偏序集,因为其元素部分可以比较大小。链对于 XXX 的一个子集满足其是全序集,及其所有的元素可以比较大小。反链对于 XXX 的一个子集,满足其任意非空子集都不是全序集, 即所有的元素不能比较大小。链覆盖若干个链原创 2021-10-08 15:13:55 · 594 阅读 · 0 评论 -
Kruscal 重构树浅谈
Kruscal 重构树浅谈这个算法本质上就是通过 Kruscal\tt KruscalKruscal 重构树的过程将边权变成点权之后建立一个堆。具体来说就是每次选择一条合法的边,将边权变成点权之后连接原来边两边的节点。这个是生成树上的性质,有些大佬说可以类比成笛卡尔树,不过那个是序列上的满足堆和 Bst\tt BstBst 的性质的树。可能性质还笛卡尔树更多一点。常用解法跳父亲找到符合条件的最小点。维护 dfs\tt dfsdfs 序判断点是否在内。结合动态规划和数据结构维护书上信原创 2021-10-09 19:56:52 · 133 阅读 · 0 评论 -
P4719 【模板】“动态 DP“&动态树分治 题解
P4719 【模板】"动态 DP"&动态树分治P4719 【模板】“动态 DP”&动态树分治先不考虑修改,可以想到 Dp\tt DpDp:设 f(i,0/1)f(i, 0/1)f(i,0/1) 表示当前的点是否选择,那么转移可以得到:f(u,0)=∑v∈sonumax(f(v,0),f(v,1))f(u,1)=∑v∈sonuf(v,0)\begin{aligned}f(u, 0) &= \sum_{v \in son_u} \max(f(v, 0), f(v, 1)原创 2021-10-08 16:26:05 · 156 阅读 · 0 评论 -
全局平衡二叉树 P4751 【模板】“动态DP“
全局平衡二叉树 P4751 【模板】"动态DP"P4751 【模板】“动态DP”&动态树分治(加强版)有事没事就用 vector\tt vectorvector 总会有天废掉的。注意在 c++11\tt c++11c++11 之后 vector\tt vectorvector 不管是是否在 O2O2O2 的条件下,速度都比常规数组慢很多,甚至比链表要慢 444 倍。死亡写法:struct Tree : vector<vector<int>> {原创 2021-10-01 21:29:11 · 184 阅读 · 0 评论 -
一句话解释哈夫曼树
一句话解释哈夫曼树 我们考虑对于一棵叶子节点有权值的二叉树,设其总共的贡献是每个叶子节点的权值乘上深度。那么我们需要构造一个使其贡献最小的二叉树,也就被称作最优二叉树。我们考虑贪心对于每次选择权值和最小的两个点进行合并,之后其父亲,权值为两个节点的权值和即可。...原创 2021-09-16 15:30:34 · 64 阅读 · 0 评论 -
浅谈欧拉路径,欧拉回路,以及有向图欧拉回路的计数
浅谈欧拉路径,欧拉回路文章目录引入欧拉图欧拉路径定义:无向图有向图欧拉回路定义无向图有向图具体实现套路字典序要求拆点成边Best 定理限制具体部分例题引入前有哈密顿路径,表示经过每个点恰好一次,现有欧拉路径,表示经过每条边恰好一次。许多题目重要的是建模,往往最浅的建模就是点之间的连边,表示可以到达。如果说需要满足到达每个点一次,这就变成了 NPC\tt NPCNPC 问题。但是我们往往可以将一个信息拆分成若干个信息,变成边之间的关系,这样就有多项式复杂度的解法,同样这个是可以求方案的。本篇会向读者原创 2021-10-21 21:35:45 · 787 阅读 · 0 评论 -
Tarjan 缩点,强联通分量
Tarjan 缩点,强联通分量文章目录引入代码基础定义强联通分量定义:代码实现:边双联通分量和桥定义:代码实现:点双联通分量和割点定义:代码实现引入如果说需要对于一个图上进行 Dp\tt DpDp,但是同一个环上的点无法进行转移怎么办?我们只能做 DAG\tt DAGDAG 上的 Dp\tt DpDp,但是有环我们该怎么办?缩环!缩点!求强联通!当然我不是说隔壁的带花树。虽然说所有的代码都是我随手打的,但是都已经经过测试,请放心阅读。代码基础定义dfn[x]表示当前点遍历顺序的原创 2021-10-19 15:40:48 · 80 阅读 · 0 评论 -
差分约束浅谈
差分约束浅谈还是挺难的一个东西。文章目录@[toc]引入实现负环最长路和最短路的区别常见例题:乘法化加法:最大最小值的应用转换引入考虑一个限制 Ai≤xi+CiA_i \le x_i + C_iAi≤xi+Ci 其中 xix_ixi 是一个给定的值。A,CA, CA,C 表示两个位置之间的关系。发现对于同一个 AiA_iAi 总共有若干个限制,那么也就是意味着 A=mini(xi+Ci)A = \min_i(x_i + C_i)A=mini(xi+Ci)。发现这个东西就是原创 2021-10-14 13:38:28 · 248 阅读 · 0 评论 -
切比雪夫距离 入门例题
切比雪夫距离和曼哈顿距离 众所周知两个点 (x1,y1),(x2,y2)(x_1, y_1), (x_2, y_2)(x1,y1),(x2,y2) 的曼哈顿距离是 ∣x1−x2∣+∣y1−y2∣|x_1 - x_2| + |y_1 - y_2|∣x1−x2∣+∣y1−y2∣。显然我们可以通过不等式去掉绝对值 max(∣x1+y1+x2+y2∣,∣x1+y1−(x2+y2)∣)\max(|x_1 + y_1 + x_2 + y_2|, |x_1 + y_1 - (x_2 + y_2..原创 2021-09-11 16:42:48 · 1936 阅读 · 0 评论 -
平面图转对偶图的应用
平面图转对偶图[BeiJing2006]狼抓兔子这个是经典题,显然就是求一个最小割。然后网络流建立无向图即可。但是如果数据范围没有那么小呢?众所周知网络流的复杂度其实挺玄学的,而且这又是一张平面图,不妨将其转化为对偶图。定义:平面图:任意两条边不相交的图。面的次数:边界的长度,用 deg(Ri)deg(R_i)deg(Ri) 表示。阶:几阶就是几个点。对偶图:本质上就是从平面图的面相互连边。性质:1:平面图的面数量等于对偶图点数量,对偶图面数量等于平面图点数量。2:对偶图一个原创 2021-08-28 10:19:03 · 766 阅读 · 0 评论 -
Boruvka 最小生成树算法
P3366 【模板】最小生成树这个算法就是考虑每一次合并 nnn 个联通块,变成 n2\frac{n}{2}2n 个。所以总共合并的次数是 log2n\log_2 nlog2n 次。我们还是使用并查集来维护每一个联通块,这个算法的好处就是因为其合并次数是 logn\log nlogn 级别的,所以我们可以在里面进行 O(n)O(n)O(n) 的处理。来处理一些不能直接进行最小生成树的情况。比如说要维护两点 &\&& 值为 000 的图。我们直接使用 KaTeX pars原创 2021-08-16 21:35:54 · 196 阅读 · 0 评论 -
浅谈AC自动机
浅谈AC自动机建议学过 AC 自动机的人来看。注意我们一开始直接建立串的时候是 Trie\tt TrieTrie 图,之后建立 fail\tt failfail 指针的时候才是真正的 ACACAC 自动机。具体来说对于 Trie\tt TrieTrie 上深度从小到大的一条链,对应的是一个曾经在某个或者多个串中出现过的子串。如果说是一条从根到底的链那本质就是代表一个串,显然对于一条链之间的点,本质上深度小的是深度大的前缀串。用处:我们可以通过遍历 Trie\tt TrieTrie 图来不重原创 2021-11-06 20:06:01 · 337 阅读 · 0 评论 -
三元环计数
三元环计数就是考试的时候整了一个这个科技,我没想出来,然后无了…具体来说就是计算图中三元团的个数。有一个 O(mm)O(m\sqrt m)O(mm) 的算法:让度数大的点连接度数小的点。枚举每个点并将其相邻的点记录匹配点为当前点 iii。枚举当前点邻居的邻居,看匹配点是否是点 iii。每个三元团只会被计算一次。分析一下复杂度:每个点的入度度数最大是 O(m)O(\sqrt m)O(m),这里可以考虑反证:如果大于 m\sqrt mm,那么连边就是不合法的。所以打标记是原创 2021-11-05 16:08:32 · 617 阅读 · 0 评论