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