图
不想WA
记录我的学习笔记呀
展开
-
Dijkstra法解单源最短路径问题(附手写堆代码)
Dijkstra法解单源最短路径问题(附手写堆代码)原题来自洛谷【模板】单源最短路径(标准版)题目描述给定一个 nnn 个点,mmm 条有向边的带非负权图,请你计算从 sss 出发,到每个点的距离。数据保证你能从 sss 出发到任意点。输入格式第一行为三个正整数 n,m,sn,m,sn,m,s 。 第二行起 mmm 行,每行三个非负整数 ui,vi,wi, 表示从 ui到 vi 有一条权值为 wi 的有向边。输出格式输出一行 nnn 个空格分隔的非负整数,表示 sss 到每个点的最短距离。原创 2020-11-30 19:09:09 · 469 阅读 · 0 评论 -
Dinic算法解最大流问题
Dinic算法解最大流问题具体的最大流的定义及原理可以参见这位朋友的博客(简单易懂)最大流问题详解(侵删)Dinic算法的基本原理利用BFS对图进行分层处理,接着使用DFS从S开始,每次层次加一寻找下一个点,直至达到汇点T,然后再回溯回去,以此遍历所有的增广路径,这样就可以满足我们同时求出多条增广路的需求,效率更高因此可给出Dinic算法的进行框架①在残量网络上通过BFS求出结点的层次,构造分成图。②在分层图上通过DFS寻找增广路,在回溯时同时更新边权。更加具体的原理可以参见这位朋友的博客原创 2020-11-27 09:46:11 · 347 阅读 · 0 评论 -
拓扑排序
题目描述在大学里面,很多课程的内容是有联系的,你只有先学习了某一门课程,才能够更好地理解另一门课程。比如,想要学好算法,你首先得学习高级语言程序设计、数据结构等课程。我们将这些课程称为它的前置课程。现在假设你是某大学某个系的教务主任,该系的学生需要修满n门课程才能达到毕业要求,已知课程之间的前置关系,请你为该系的学生排课。输入第一个数为课程数n,课程之间的前置关系数m,课程的编号为0~n-1接下来m行,每行2个整数u、v,表示u号课程是v号课程的前置课程。输出n个整数,用空格隔开,表示排原创 2020-11-22 16:59:08 · 249 阅读 · 0 评论 -
最小生成树问题之Kruskal算法
这里最小生成树的定义不再赘述,直接给出Kruskal算法的思路与代码。Kruskal算法的思路首先对于一幅图,设G=(V,GE)为具有n个顶点的带权连通图。T=(U,TE)为生成的最小生成树,初始时,T中包含G中所有顶点,但不包含边。从G中选择一条当前未选择过的、且边上权值最小的边加入TE中,若加入TE后使得T未产生回路,则本次选择有效,若使得T中产生回路,则本次选择无效,放弃选择这条边。重复上述选择过程,直到TE包含了G的n-1条边,此时T为G的最小生成树。代码实现过程Kruskal算法的实现主原创 2020-05-26 16:22:01 · 509 阅读 · 0 评论 -
最小生成树问题之Prim算法
这里最小生成树的定义不再赘述,直接给出Prim算法的思路与代码。Prim算法的思路首先对于一幅图,设G=(V,GE)为具有n个顶点的带权连通图。T=(U,TE)为生成的最小生成树,初始时,T中为空。首先,在图中选择一个顶点进入T中。接着再从G中选择一条一个顶点仅在V中,另一个顶点在U中,并且权值最小的边加入集合TE,同时将该边仅在V中的那个顶点加入集合U。通俗来讲,就是在不在生成树中的顶点中选择一个顶点,使其到生成树中某个顶点的权值为最小。然后重复经历此过程直到所有顶点都被选取完,此时的T即为G的最小原创 2020-05-24 22:56:30 · 450 阅读 · 0 评论