图论
binggui2
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2021牛客多校第八场 F 离线求值+bitset存图+滚动数组
F 在线复杂度高就离线 每个点都是由下或右去转移的,只用记录两层节点即可,相当于是一个滚动数组。 对于每个节点来说,用一个bitset存图,用来记录当前点是否可以到达地图上的某个点。 更新完该点的bitset后更新从该点出发的答案。 #include <bits/stdc++.h> using namespace std; const int N = 510, M = 500050; #define node(x, y) x * m + y int n, m, k; char z[N][N原创 2021-08-11 09:00:28 · 162 阅读 · 0 评论 -
拓扑排序
拓扑图 即为 有向无环图 拓扑序 满足 对于任何有子节点的节点来说,该节点的子节点在该节点的后面 拓扑排序 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 110, M = N * N; int n; int h[N], e[M], ne[M], idx; int q[N]; i原创 2020-09-17 22:39:33 · 197 阅读 · 0 评论 -
欧拉路径
欧拉路径:欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边通过的且只通过一次。 欧拉回路:欧拉回路是指起点和终点相同的欧拉路。 对于无向图,所有边都是连通的 (1)存在欧拉路径的充分必要条件:度数为奇数的点只能是0个或者2个 (2)存在欧拉回路的充分必要条件:度数为奇数的只能是0个 2对于有向图,所有边都是连通的 (1)存在欧拉路径的充分必要条件:要么所有点的出度均等于入度, 要么除了两个点之外,其余所有点的出度等于入度,剩余的两个点:一个满足出度比入度多1(起点),另一个满足入度比原创 2020-09-17 22:40:24 · 3784 阅读 · 0 评论 -
无向图的双连通分量
边的双连通分量 e-DCC 桥 极大的不存在桥的连通块 点的双连通分量 v-DCC 割点 极大的不包含割点的连通块 每个割点至少属于两个连通分量 任何两个割点之间的边不一定是桥 任何一条桥的两个端点不一定是割点 这就证明了割点和桥是没有关系的 点双连通分量 和 边双连通分量也是没有关系的 边双连通分量,时间戳, dfn(u) low(u) 1. 如何找到桥 (假设x->y是一个桥) 那么 桥 <=> dfn(u) <low(y) 无法形成环 2. 如何找到所有的边的双连原创 2020-09-17 22:40:15 · 212 阅读 · 0 评论 -
差分约束
解不等式组 xi <= yj + ck 就比如 x1 <= x2 + 1 x2 <= x3 + 2 x3 <= x1 - 2 x1 = 0 x2 = -1 x3 = -2 这就是其中一个可行解 那么就可以把 不等式组 变成 可行解 xi <= xj + ck 表示有一条 j -> i 权值为 ck 的边, 根据不等式组,可以建图, 求不等式组的可行解 源点需要满足的条件:从源点出发,一定可以走到所有的边 如果不能遍历所有的边,就是说并不是所有的不等式是满足条件的,那原创 2020-09-17 22:40:07 · 168 阅读 · 0 评论 -
LCA 最近公共祖先
求最近公共祖先的算法 首先得是一棵树,这样才有祖先的概念, 设a,b为树中的两个节点,原创 2020-09-17 22:39:58 · 186 阅读 · 0 评论 -
强连通分量
tarjan板子 const int N = 10010, M = 100010; int n, m; int h[N], e[M], ne[M], idx; int dfn[N], low[N], timestamp; int stk[N], top; bool in_stk[N]; int id[N], scc_cnt, Size[N]; void tarjan(int u){ dfn[u] = low[u] = ++ timestamp; stk[ ++ top] = u, in原创 2020-08-21 10:20:34 · 161 阅读 · 0 评论
分享