随笔分类 -  图论

摘要:平面图 就是放在平面上展开,存在一种画法能够使得图的边与边之间没有交点,这玩意就叫平面图。 一般来说网格图喜欢考这个,提到网格图可以留个心眼。 但是一般来说吧,这个东西要配和着对偶图来使用。 对偶图 就是对于原平面图的每一条边,将与其接壤的两个面在对偶图中连一条边。特殊地,当且仅当对于一条边两边的面 阅读全文
posted @ 2022-02-24 11:22 cbdsopa 阅读(371) 评论(0) 推荐(0) 编辑
摘要:冬令营突然发现的一个比较厉害的东西。 Dancing Links 用于解决覆盖性问题的利器。 两个不同分支,一个精准覆盖问题,一个可重复覆盖问题。 先讲相对基础的精准覆盖问题。 精确覆盖问题 就是说全集由多个集合恰好覆盖,各个集合间无交。 这个问题我们先考虑一个具体一些的问题。 我们用下面的那个 模 阅读全文
posted @ 2022-02-24 11:20 cbdsopa 阅读(47) 评论(0) 推荐(0) 编辑
摘要:本质上大概是搜索优化。我们将bfs使用的队列改为优先队列,并使用结构体存储节点,重载 '<' 小于号。 然后我们提高搜索效率的方法就是通过一个估价函数,评估当前情况与答案情况的差异,然后选取差异最小(或根据题目,并基于个人经验选取能够更快找到答案的情况) 由于优先队列存在复杂度,有时候估价函数写得不 阅读全文
posted @ 2022-02-24 11:18 cbdsopa 阅读(485) 评论(0) 推荐(0) 编辑
摘要:注:A 求解K短路效率极其低下,时间复杂度O(nklog n),空间视题目而定,因为本质是爆搜,可求解数据范围较小的题目。 我们使用A求解k短路: 首先需要预处理出估价函数。对于原图建立反向图,然后跑终点的单源最短路。用终点到这个点的距离作为A的估价函数,可以完全保证搜索 阅读全文
posted @ 2022-02-24 11:17 cbdsopa 阅读(100) 评论(0) 推荐(0) 编辑
摘要:考模拟赛考到了线段树合并,于是学了树上启发式合并(?) 它相较于线段树合并的优点在于: 空间开销小 无线段树的常数 写法简单易理解 好那么开始进入正题。 首先说一下它的用途,可以用来解决一些子树问题。 具体的做法是先 dfs 预处理,然后像树剖那样剖出重儿子,可以剖出 dfs 序为之后加上一点常数优 阅读全文
posted @ 2022-02-24 11:15 cbdsopa 阅读(49) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> using namespace std; #define re register #define MAXN 5010 struct side { int u,v,w; }s[200010]; int fa[MAXN],n,m,ans,cnt,cnt1; 阅读全文
posted @ 2022-02-24 11:14 cbdsopa 阅读(20) 评论(0) 推荐(0) 编辑
摘要:在某些情况下可以和树剖替换。(当然某些情况替代不了,我愿称之为小树剖) 前置知识 倍增求LCA 了解差分思想 (既然要替代树剖怎么可能会用树剖求LCA呢/xyx) 引入 首先我们都知道差分是可以用来通过单点修改维护区间信息的(如单修区查的树状数组),因为我们在前面加上,再在后面减掉,中间这一段是得到 阅读全文
posted @ 2022-02-24 11:13 cbdsopa 阅读(32) 评论(0) 推荐(0) 编辑
摘要:相当于把树上的链抽出来变成区间进行操作。 重链剖分(本文重点): 本文依照P3384 【模板】轻重链剖分/树链剖分的实现进行讲解。 就是剖分出重链覆盖全树。 重链:除开头的端点为轻儿子外,其他节点全为重儿子的链。 重儿子:一个节点的儿子中子树大小最大的儿子。 要进行树链剖分,先要进行预处理。需要处理 阅读全文
posted @ 2022-02-24 11:12 cbdsopa 阅读(30) 评论(0) 推荐(0) 编辑
摘要:用于解决树上路径长问题的算法,复杂度是比较优秀的 O(nlogn) 直接按照题目来讲。点分治1 我们要维护树上路径长度为 k 的路径是否存在(当然视题目而定,点分治的操作比较灵活)。这类问题我们选用点分治。 具体怎么操作呢? 一般就是,每次用vis标记删除根节点,然后对于所有没被删除 阅读全文
posted @ 2022-02-24 11:11 cbdsopa 阅读(26) 评论(0) 推荐(0) 编辑
摘要:可以说是带修改的点分治。(当然也可以不带修改,是那种需要多次询问的) 灵活性很强,我们可以维护一些树上点对问题。 话不多说了,直接进入正题。 具体操作 我们考虑对于保存点分治的路径,然后把这些点依次连接起来,点分树就建好啦。(很显然这个只是把树重构,然后保证树高为 log n) 可以发现这 阅读全文
posted @ 2022-02-24 11:10 cbdsopa 阅读(48) 评论(0) 推荐(0) 编辑
摘要:Tarjan系列!我愿称Tarjan为爆搜之王! 1.Tarjan求LCA 利用并查集在一遍DFS中可以完成所所有询问。是一种离线算法。 遍历到一个点时,我们先将并查集初始化,再遍历完一个子树之后,将该子树的根的父亲指向当前点。 最后在回溯的时候给询问的答案更新一下,枚举一下 $v\in [1,n] 阅读全文
posted @ 2022-02-24 11:06 cbdsopa 阅读(52) 评论(0) 推荐(0) 编辑
摘要:实际上就是个链表。 #include<bits/stdc++.h> using namespace std; int n,m; vector<bool>vis; vector<int>head,next,to,val; /* head[i]存储以i为起点的第一条边的编号 next[i]存储编号为i的 阅读全文
posted @ 2022-02-24 09:07 cbdsopa 阅读(31) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示