图论
knookda
这个作者很懒,什么都没留下…
展开
-
有关反向建图
反向建图 基本认识 当有向图需要求多个点到一个点的最短距离时 除了使用多元最短路的方法还可以通过反向建边转化为单源最短路 顾名思义,将边反向 反向建边方法 用邻接表存图时(用堆优化版dijkstra跑最短路时适用) void add(int a, int b, int c) { e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++; } 、、、、 while(m --) { int x, y, w; scanf("%d%d原创 2022-02-14 14:11:18 · 380 阅读 · 0 评论 -
Cheering up the Cow
而接下来的问题就是,求得最小的忽悠奶牛时间,对于一颗最小生成树,劝奶牛的路线如图,我们可以很明显的得出。(根据其度数特点)做最小生成树得到距离加上所选起始点的交谈时间即可。对于边权,我们处理为。...原创 2022-07-21 14:59:17 · 70 阅读 · 0 评论 -
传递闭包小结
传递闭包概述 可以得知两个点之间的连通性(直接联通与间接联通居民算联通) 可以把间接联通的点直接联通 一般使用floyd算法实现此操作 for (int k = 1; k <= n; k ++ ) for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (g[i][k] && g[k][j])原创 2022-05-05 15:38:33 · 269 阅读 · 0 评论 -
分层图最短路
分层图最短路 概念与使用场景 分层图:顾名思义就是分很多层的图 分层图最短路是指在可以进行分层图的图上解决最短路问题。 常用于题目对边的权值提供可选择的操作 一般模型:在图上,有k次机会可以直接通过一条边,问起点与终点之间的最短路径。 算法思路 将最原始的图作为初始图(第零层),根据所给操作将图分层 每进行k次操作,那么就将图复制成 k份,第 i 层图代表进行了 i 次操作后的图。 分层图构建思路 先将图复制成 k+1 份0~k+1 对于图中的每一条边 <u,v> 从 ui 到 vi+原创 2022-05-01 20:27:18 · 646 阅读 · 0 评论 -
关于树的遍历与直径
关于树的直径 注:以下代码的前提为用邻接表存储的树 概念: 树中最远的两个节点之间的距离被称为树的直径 连接这两个点的路径被称为树的最长链。 求法: 当没有负权边时 可采用搜索的方法找到端点以及直径长度(以下以bfs为例) 思路 任取一点作为起点找到距离该点最远的一个点u 再找到距离u最远的一点v 那么u和v之间就是一条直径 int bfs(int u) { memset(dist, -1, sizeof dist); q.push(u); dist[u] = 0;原创 2022-04-17 10:30:30 · 316 阅读 · 0 评论 -
连点成图(1)
将n个点连成一张无向图的特殊情况(无重边与自环) 完全图 此种情况边数最多,为n(n-1)/2条边 完全图:每个点与其他各个点连一条边 菊花树 以一个点为中心其他所有点向他连边 此种情况边数最小为n-1条边 ...原创 2022-03-24 16:37:13 · 400 阅读 · 0 评论