随笔分类 -  图论

摘要:0代表还没访问 1代表正在访问 2代表已经访问完 如果dfs过程中遇到1,则表明找到了环 遇到2则不必继续找,用于剪枝 vector<int> adj[2010]; int vis[2010]; bool DFS(int u) { vis[u] = 1; for (auto nxt : adj[u] 阅读全文
posted @ 2023-05-02 10:32 80k 阅读(48) 评论(0) 推荐(0) 编辑
摘要:1、流网络:存在一个源点,一个汇点,有向边,带边权(容量),假设没有反向边(反向边可以通过加点处理掉) 2、可行流f:(1)满足容量(边权)限制,即流量小于等于容量,且大于等于0,(2)流量守恒:除了源点和汇点,其余点不存储流量(流进多少就流出多少)。 3、可行流的流量|f|:每秒从源点净流出的流量 阅读全文
posted @ 2022-11-02 21:16 80k 阅读(108) 评论(0) 推荐(0) 编辑
摘要:当出现问题要求,对左侧n个点和右侧m个点之间,全部建立边时,时间复杂度最坏是O(n^2) 可能会超时。 这是可以采用建立中间点,将左侧连接到中间点,再将中间点连向右侧。 这样建边的复杂度会降到O(n) 例题: https://www.acwing.com/problem/content/descri 阅读全文
posted @ 2022-09-25 12:02 80k 阅读(20) 评论(0) 推荐(0) 编辑
摘要:定义:经过每一条边且每一条边恰好只经过一次 一、无向图中,当所有边都连通时: 存在欧拉路径,等价于,图中度为奇数的点只有0或2个。 存在欧拉回路,等价于,图中度为奇数的点只有0个。 二、有向图中,当所有边都连通时: 存在欧拉路径,充要条件,要么所有点的出度等于入度,要么除了两个点之外,其余所有点的出 阅读全文
posted @ 2022-09-21 19:52 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:例题: https://www.acwing.com/problem/content/345/ 模板: fore(k,1,n) { fore(i,1,n) { fore(j,1,n) { A_M[i][j]|=A_M[i][k]&A_M[k][j]; } } } View Code 阅读全文
posted @ 2022-09-21 16:26 80k 阅读(15) 评论(0) 推荐(0) 编辑
摘要:1、性质:二分图,等价于不存在奇数环、用染色法染色没有矛盾。 染色法求二分图模板: int n,m; const int N=20010; vector<int> adj[N]; vector<int> cost[N]; int color[N];//0表示未染色,1白色,2黑色 bool DFS( 阅读全文
posted @ 2022-09-20 17:00 80k 阅读(40) 评论(0) 推荐(0) 编辑
摘要:一、定义: 1、极大的不含有桥(割边)的连通块称为边双连通分量。 性质: (1)边双连通分量,不管删掉哪条边,还是连通的 (2)任意两点间都有两条(边)不相交的路径 2、极大的不含有割点的连通块称为点双连通分量。 性质: (1)每个割点至少属于两个点双连通分量 (2)割点和割边没什么关系 二、求解方 阅读全文
posted @ 2022-09-19 16:20 80k 阅读(57) 评论(0) 推荐(0) 编辑
摘要:1、Tarjan算法求强连通分量: 强连通分量的点可能会向上联通。 维护两个时间戳。 模板: #include<bits/stdc++.h> using namespace std; const int N=10010; int n,m; vector<int> adj[N]; int dfn[N] 阅读全文
posted @ 2022-09-18 16:00 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:用于在树上的一段区间(两点间的路径上的所有边)整体增加一个值。 其中,每个结点的值代表着其向上联通的边的值。 方法为: 其中,d为差分数组,p为LCA(x,y) 且最终 val(x)=sum(d(u)),u为以x为根的子树中的全部节点 原理: 可以发现,对x,y,p的操作,仅对路径上的边对应的d有影 阅读全文
posted @ 2022-09-17 10:51 80k 阅读(29) 评论(0) 推荐(0) 编辑
摘要:1、向上标记法 从节点向上查找,O(n) 2、倍增法,预处理O(nlogn),查询O(qlogn) 记录当前节点向上2^j 步的祖先是谁 记录当前节点的深度depth[i] 哨兵:节点0,且depth[0]=0。当fa[i][j]已经跳出这棵树时,fa[i][j]=0 步骤: (1) 先将两个节点跳 阅读全文
posted @ 2022-09-16 16:37 80k 阅读(73) 评论(0) 推荐(0) 编辑
摘要:求解环上∑f/∑w的最大值,在SPFA求负环的课程中有提及: https://www.acwing.com/video/559/ 可以使用二分进行求解 阅读全文
posted @ 2022-09-14 21:25 80k 阅读(27) 评论(0) 推荐(0) 编辑
摘要:1、方法: 一般推荐方法(2),最差时间复杂度较低 模板: int n,m,w; const int N=510; vector<int> adj[N]; vector<int> cost[N]; int dis[N]; bool st[N]; int cnt[N]; bool SPFA() { m 阅读全文
posted @ 2022-09-14 15:31 80k 阅读(34) 评论(0) 推荐(0) 编辑
摘要:次小生成树有性质: 例题:https://www.acwing.com/problem/content/1150/ 代码: #include<bits/stdc++.h> #define fore(x,y,z) for(LL x=(y);x<=(z);x++) #define forn(x,y,z) 阅读全文
posted @ 2022-09-13 22:26 80k 阅读(23) 评论(0) 推荐(0) 编辑
摘要:一般使用kruskal(克鲁斯卡尔)(mlogm) 对于稀疏图,用朴素prim(n^2) prim:每次选择和当前已经构建出的连通块相连,且权重最小的边,加入当前连通块。 一共需要扩展(n-1)次 只能处理一个连通块,不能“生成森林” 例题:https://www.acwing.com/proble 阅读全文
posted @ 2022-09-13 09:54 80k 阅读(51) 评论(0) 推荐(0) 编辑
摘要:主要思路为,在Floyd过程中,找到环中最大值为k的最小环 解释: 以dp的视角看待Floyd算法,在循环到k时,已经获得了经过前k-1个点的最短路径。 设环中最大标号为k,则路径可以表示为:i->k->j->...->i i->k和k->j为直接相连,j->...->i为通过小于标号k的点相连。 阅读全文
posted @ 2022-09-12 19:46 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:https://atcoder.jp/contests/abc267/tasks/abc267_f 此题目首先有结论:距离树上任意一点距离最远的点,是直径的其中一个端点 https://www.cnblogs.com/ydUESTC/p/16664485.html 故对于一个查询u,k如果存在一个答 阅读全文
posted @ 2022-09-07 11:20 80k 阅读(64) 评论(0) 推荐(0) 编辑
摘要:对于一棵树,定义点的距离为二者的最短路径长度,可以有 树的直径的端点为(L,R) 对于任意一点u,L或R为距离u最远的点。 证明: https://atcoder.jp/contests/abc267/editorial/4753 阅读全文
posted @ 2022-09-07 10:35 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:https://www.acwing.com/problem/content/1131/ #include<bits/stdc++.h> #define fore(x,y,z) for(LL x=(y);x<=(z);x++) #define forn(x,y,z) for(LL x=(y);x<( 阅读全文
posted @ 2022-09-04 18:14 80k 阅读(15) 评论(0) 推荐(0) 编辑
摘要:例题: https://www.acwing.com/problem/content/description/1131/ 1、仅用dis数组记录,出队时记录最小距离(可能会导致重复入队) #include<bits/stdc++.h> #define fore(x,y,z) for(LL x=(y) 阅读全文
posted @ 2022-09-04 17:12 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:https://www.codechef.com/submit/ROCKET_PACK?tab=statement 主要思路为,转化为最短路问题,然后对全部点进行扫描。 active集合按dis排序,remove集合按到达边界排序。 当到某点i时,先根据remove,对到达边界小于i(已经不会被用于 阅读全文
posted @ 2022-08-31 11:27 80k 阅读(49) 评论(0) 推荐(0) 编辑

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