随笔分类 -  图论

摘要:图的基本概念 众所不一定周知,图是由两部分组成:点和边 一个最简单的有向图: 一些基础概念: 有向图 边存在方向,即 \(u\to v\) 不代表 \(v\to u\)。 无向图 边不存在方向,\(u\to v\) 同时代表 \(v\to u\)。 在代码中一般用双向图代表无向图。 自环 存在边 \ 阅读全文
posted @ 2026-01-16 13:57 Zvelig1205 阅读(8) 评论(1) 推荐(0)
摘要:初学只需要背代码就好了,而复习的时候要考虑的就多了( (打牛客的时候用到,发现忘得差不多了) 概念解读 连通:在无向图中,从任意点 A 都可以到达任意点 B。 强连通:在有向图中,从任意点 A 都可以到达任意点 B。 弱连通:将有向图看作无向图后,从任意点 A 都可以到达任意点 B。 特殊地,单独的 阅读全文
posted @ 2024-07-28 16:38 Zvelig1205 阅读(123) 评论(0) 推荐(0)
摘要:回字有四样写法,你知道么? lca,即最近公共祖先,如上图中 2 和 13 的 lca 是 1,5 和 6 的 lca 是 2。 众所周知,LCA 的主流求法有 4 种。 那么,你都会了吗? 树链剖分 如果你不会重链剖分。 由于重儿子优先搜索,同一条重链上的点的时间戳也是连续的(如图上的 1,2,3 阅读全文
posted @ 2022-10-30 21:49 Zvelig1205 阅读(1016) 评论(0) 推荐(0)
摘要:次短路 严格次短路 基本思路:两个 dis 数组分别储存最短路和次短路,依然使用堆优 Dij。 显然,堆优部分是不变的。 struct node{ int id,val; bool operator <(const node &b)const { return val>b.val; } }; pri 阅读全文
posted @ 2022-10-23 09:23 Zvelig1205 阅读(142) 评论(0) 推荐(1)
摘要:kruskal 最小生成树 kruskal 是一种常见且好理解的最小生成树(MST)算法。 前置知识 并查集 看到路径压缩就可以了。 生成树 在有 n 的顶点的无向图中,取其中 n-1 条边相连,所得到的树即为生成树。 最小生成树就是生成树边权和最小。 kruskal 求 MST kruskal 基 阅读全文
posted @ 2022-04-04 21:42 Zvelig1205 阅读(271) 评论(0) 推荐(0)
摘要:树链剖分 将树转化为线性序列,便于维护树上信息。 include: 重链剖分,长链剖分,实链剖分。 注:此文默认读者已经熟悉线段树的基本操作,不熟悉这可以先看这个:线段树 重链剖分 剖树 建图 很普通的邻接表存图: void ins(int x,int y) { nex[++cnt]=fir[x]; 阅读全文
posted @ 2022-02-09 15:03 Zvelig1205 阅读(297) 评论(0) 推荐(2)
摘要:最短路 如下图(引自知乎): 求两点之间的最短路径。 最短路有两种:单源和全源。 常用的有四种最短路算法: Floyd(全) SPFA(单) Dijkstra(单) Johnson(全) 还有两种最短路的应用: 最短路计数 最短路径 蒟蒻的最短路题单 Floyd(多源最短路) Floyd 其实是一种 阅读全文
posted @ 2022-02-09 14:59 Zvelig1205 阅读(832) 评论(0) 推荐(1)