图论及其应用资料祥解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
小试身手 NOIP2013Day1T3 给你一个图,有Q此询问,每次询问任意两点之间边权最大路径的最小值 小试身手 求出最小生成树然后使用倍增算法快速求出路径的值 小试身手 USACO 2008Oct 灌水 Farmer john 有一个农场需要灌溉,首先我们序号给一个位置引水需要一定的花费,然后任一两块农田之间连接水渠也有一定的花费,求全部灌溉的最小花费 n=1000 小试身手 首先建立一个超级原点,和所有点连边权值是饮水的代价,然后求最小生成树即可 其他 最有比率生成树 最小乘积生成树 潴留算法 强连通分量 对于一个有向图G的一个导出子图G={V,E} 到处子图的定义是:其中V是V的子集, 当且仅当对于任意x,y ∈E且x∈V,y∈V 则x,y属于E 如果该导出子图中任意两点可达,则成为G是G的一个强连通分量 如果G是G的一个强连通分量,且不存在一个H是G的强连通分量满足G包含于H,G是一个极大强连通分量 强连通分量的性质 强连通分量之间任意两点互相可达,任意两个强连通分量之间的关系是拓扑的 Tarjan算法 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。 tarjan算法 定义DFN(u)为节点u搜索的次序编号(时间戳),Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序号。由定义可以得出 Low(u)=Min DFN(u), Low(v),(u,v)为树枝边,u为v的父节点 DFN(v),(u,v)为指向栈中节点的后向边(非横叉边) 当DFN(u)=Low(u)时,以u为根的搜索子树上所有节点是一个强连通分量。 tarjan算法 tarjan算法 拓扑排序 每次选择一个入度为0的点加入队列,然后删掉这个点的所有出度 小试身手 APIO2009 atm 有一个城市有若干条有向道路 一个小偷从一个点出发想偷这个城ATM机,他从一个点出发,最后偷完之后需要到一个酒吧庆祝,给定道路情况,每个路口atm的钱数和有没有酒吧,求最多能偷多少钱。 n=100000 小试身手 首先强连通分量缩点,然后进行拓扑排序之后DP 图论及其应用 山东省青岛二中 王元炜 图论及其应用 图的定义 有向图 无向图 特殊的图——树 图的最短路算法 dij bellman-fold(spfa) floyed 图的生成树 prim kruskal 潴留算法 有向图的强连通分量 tarjan算法 有向图的拓扑序 拓扑排序 图的定义 1.定义图G={V,E} V代表图的顶点集合,E代表图的边的集合。 2.对于有向图,E中的每个元素是由有序点对p,q构成,代表p-q的一条边。 3.对于无向图,E中的每个元素是由无序点对(p,q)构成,代表p和q之间的一条边。 4.如果一个无向图满足|E|+1=|V|并且联通,那么我们成这个图是一棵树 5.所有边都没有权值或者权值都相同叫做无权图,否则叫做有权图。 图的最短路 图的最短路在实际应用中非常多 我们说的图的最短路默认为有向图,对于无向图可以理解成每条边分成两条边,方向相反权值相同。 简单就是说从一个顶点出发,经过一些列边的集合,到达另外一个点。这些边的权值加起来最小 最短路算法 对于一个无权图,那么可以使用宽度优先搜索(bfs)进行得到答案 时间复杂度O(n) 最短路算法 如果我们需要知道所有的点对之间的最短路,可以使用floyed的传递闭包方法。 floyed算法思想: 我们每次选择一个中间点,然后枚举起点和终点,用通过中间点的最短路径更新起点和终点之间的最短路径时间复杂度O(n^3) floyed代码实现 代码非常简单 注意枚举顺序 最短路算法 如果我们只需要知道从一个点出发到其他点的最短路,而且图中的边权全部为正,我们可以使用dijsktra算法。 算法思想: 我们每次选择一个距离原点最近而且没有被访问过的点,然后我们访问这个节点,并且用这个点的所有出边去更新其他所有节点从原点出发的距离,重复此算法直到所有点都被访问过为止 时间复杂度O(n^2+m)使用堆和临街表优化可以做到O(nlogn+nlogm) dijsktra算法代码实现 dijsktra算法代码实现 使用堆优化 Bellman-fold算法(spfa) 如果图中出现了负权变,甚至有可能出现负权环(此时最短路不存在)。其他两个算法就不再适用。这里我们介绍bellman-fold算法 bellman-fold算法将判定一个图是否存在最短路,如果存在则返回,否则返回不存在最短路 Bellman-fold算法(SPFA) 算法思想: 我们将算法进行n此,每次从所有点出发更新所有后继节点的最短路情况 如果

文档评论(0)

基本资料 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档