随笔分类 - 图论
摘要:# 最小生成树 ## 定义 * 边权和最小的生成树 ## Kruskal 算法 * 让边从小到大排序,如果不在同一集合,就加入 ```c++ #include using namespace std; const int MAXN = 5e3 + 10,MAXM = 2e5 + 10; int n,
阅读全文
摘要:# 基环树 ## 简单无向图有n个点n-1条边,那么它们会连成一条直线 ## n个点n条边,相对多一条边,有且仅有一个环 ## 可以利用拓扑排序找这个环 ### 例题:[F - Well-defined Path Queries on a Namori](https://atcoder.jp/con
阅读全文
摘要:# 最近公共祖先(LCA) ## 主要思路:一个节点的 的祖先是那个节点 的祖先的 的祖先 ## 也就是说 ## 还要计算 的值,记录深度 ```c++ #include using names
阅读全文
摘要:# 二分图(二部图) ## 概念:可分为两个集合,集合内的点无边相连的图 ### 判定:染色法 ```c++ int col[MAXN]; vector ed[MAXN]; bool bfs(){ col[1] = 1; queue qu; while(!qu.empty()){ int u = q
阅读全文
摘要:# 次小生成树 ## 定义:边权之和大于最小生成树边权之和的生成树中最小的一个 ## 思路:枚举所有未连接的边连上,那么一定会出现一个环,再去掉环上最大的边(如果与新加的边等大就要去次小边),这个最小值就为次小生成树的值 ## 朴素求法:先用kruskal求出最小生成树,然后从每个点开始找到其他点的
阅读全文
摘要:# 最大流问题 ## 给出起点、终点、边最大能传递的值,问从起点到终点最多能传多少 * 阻塞流:不能再给终点增加值的流(最大流就是一种阻塞流) * 传统算法:新建一个剩余量的图,找路径、减去最小值、删路径,重复直到为阻塞流(不一定为最优解) ## Ford-Fulkerson算法(复杂度O(fm),
阅读全文
摘要:# tarjan算法(求强连通分量)(缩点) ## 强连通:两个点相互可达 ## 强连通分量:集合中的点两两可达 ## 思路:记录自己的时间戳dfs与能到达的最小时间戳low,先dfs搜索完自己能到达的点,如果更新后的最小时间戳low与己的时间戳dfs相等说明自己就是那个强连通分量顶点,如果不相等说
阅读全文