图论
图论算法
Mr.琛
钻石要琢磨
展开
-
HDU1269(有向图强连通分量Tarjan算法)
今天学习有向图的强连通分量,学习了Tarjan算法(其实还有Gabow和Kosaraju算法…),同时,Tarjan对缩点是很有用的。Tarjan算法是基于dfs的,由于任何一个强连通分量,必定是对原图的深度优先搜索树的子树。那么其实只要确定每个强连通分量的子树的根,然后根据这些根从树的最低层开始,一个一个的拿出强连通分量即可。两个贯穿算法的数组:(1)dfn[i]:i结点被首次深度优先搜索...原创 2019-10-27 17:38:25 · 187 阅读 · 0 评论 -
拓扑排序算法总结
拓扑排序算法复习总结:拓扑排序是图论中较为简单的一个算法,思路较为直接。简单而言,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。(贴自百度百科)拓扑排序思路:(1)找入度为0的结点存入答案序列;(2)将与该结点相关的出边删除(相应的结点入度减1);重复上述过程至不存在入度为0的结点。拓扑排序一般用法:(1)拓扑排序通常涉及图中结点的优先级关系,要由一系列结点...原创 2019-10-26 15:43:46 · 1470 阅读 · 0 评论 -
最小生成树算法总结(Prim和Kruskal算法)
今天刚好上课讲到最小生成树,来复习一下最小生成树算法。最小生成树实质上就是贪心思想在图论上的一个应用,无论是prim还是kruskal算法,都离不开选择边权时的贪心策略,即总是找当前结点相关的最小边权加入完成的集合中,直到达到最优解。...原创 2019-10-23 08:09:55 · 758 阅读 · 0 评论 -
POJ 3255(迪杰斯特拉算法求次短路)
POJ3255,问题是求节点1到n的次短路。在dijkstra求最短路算法的基础上进行变形,用两个数组分别记录源点到各节点最短路径和次短路径;每次更新时,都将最短路的节点及可能成为次短路的节点push入队;#include<cstdio>#include<cstring>#include<algorithm>#include<queue>...原创 2019-08-04 12:04:25 · 515 阅读 · 0 评论 -
poj3723--Conscription(最大权森林问题)
题意:招募n女,m男,其中r对有亲密关系,招募每个人花费为10000-(已经招募的人中和自己亲密度的最大值),求招募所有人的最小总花费。思路:乍一看以为是二分图,吓得想了一下觉得还是二分图,但其实这个思路转化一下就是最大生成树模板题;可以看作先把所有人招募进来之后减掉亲密关系的优惠。亲密关系的最大优惠即为最大生成树的结果的权值。错误思路:我的第一个思路是用最小生成树加上一个sum数组记录根节点...原创 2019-08-19 12:07:47 · 148 阅读 · 0 评论 -
HDU1878--判断无向图是否存在欧拉回路
欧拉回路:如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径,如果一个回路是欧拉路径,则称为欧拉回路。无向图存在欧拉回路的条件:1.判断图是联通的;2.所有点的度数都是偶数;代码如下:#include<cstdio>#include<cstring>#include<algorithm>#include<vector>us...原创 2019-08-28 08:23:48 · 939 阅读 · 0 评论 -
HDU--6514(Monitor)(二维差分,前缀和)
题意:每个监控都监控到一个矩形区域,问给定的矩形区域能不能完全被监控覆盖。思路:如果对每个监控内的范围每次都去逐个改变的话会TLE…这时候类似一维前缀和差分的思想,采用二维差分,思想和一维类似,只是把图拓展到二维,由于监控重不重复覆盖都是覆盖的情况,所以差分处理后要把非0数(即监控次数)全部置为1,然后再去求所求矩形面积是否等于该范围内监控覆盖的面积即可。代码如下:(由于n*m=10^7的数据...原创 2019-08-28 13:35:36 · 363 阅读 · 0 评论 -
HDU2454--Degree Sequence of Graph G(Harvel定理判断是否可简单图化)
题意:问以该序列为节点度数是否可简单图化;思路:采用度序列将序列值从大到小排序,每次贪心取出最大度的点(如果该度数已经大于剩下的节点数-1了直接return false,因为这种情况不可图),将其度置为0,将其与剩下的节点逐一连上一条边(连上边的节点的degree–),若出现负边则说明存在环或者平行边,return false,若循环出现度数为0的个数==节点数,return true。(可简单...原创 2019-08-28 21:54:12 · 1402 阅读 · 1 评论