随笔分类 -  图论

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

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