最短路径
文章平均质量分 79
kalilili
双眼闭三年。
展开
-
只有5行的floyd-warshall算法
for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j]; }上面是核心代码。其实这个Floyd算法是自底向上的动态规划算法。Dk(i,原创 2015-01-13 16:02:02 · 712 阅读 · 0 评论 -
POJ 3114 Countries in War(强连通分量+最短路)
题目大意:n个间谍 他们之间传送信息需要一定的时间一个联通分量里面的间谍属于一个国家,之间的信息传递不需要时间然后问你从一个间谍传一个信息到另一个间谍那需要最少时间 也可能传不到思路:先缩点,再最短路,由于n最大只有500.可以用邻接矩阵,而且对缩点后的DAG的边权可以做贪心处理,只留两个强连通分量间的最短边长即可。//2852K 297MS C++ 2595B#include原创 2015-04-23 21:55:24 · 969 阅读 · 0 评论 -
POJ 3259 Wormholes(判负权回路)
题意:John的农场里N块地,M条路连接两块地,W个虫洞;路是双向的,虫洞是一条单向路,会在你离开之前把你传送到目的地,就是当你过去的时候时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。简化下,就是看图中有没有负权环。思路:bellman判负权回路,因为是判图的负权回路,图可能不连通,所以可以假定无穷远处为源点。我用的是SPFA,为了解决原创 2015-03-12 18:00:17 · 691 阅读 · 0 评论 -
杂谈次短路
POJ3255 Roadblocks 这是今天遇到的第一个求次短路问题(要是来学具体实现的就不需要看我的这篇啦~,这篇偏向于数学证明)题意:某街区共有R条道路、N个路口。道路可以双向通行。问1号路口到N号路口的次短路长度是多少? 次短路指的是比最短路长度长的次短的路径。同一条边可以经过多次。目前掌握两种解法,现在总结一下。总结中disx[y]代表x到y的最短距离。解法一原创 2015-02-03 15:31:25 · 1278 阅读 · 0 评论 -
POJ 3660 Cow Contest(floyd传递关系闭包)
题 意:给牛的数量n和m对输赢关系,若n头牛之间都存在输赢关系(可传递,例如A赢B,B赢C,那么可以认为A赢C),则该牛名次确定。思 路:用floyd传递关系#include#include#include#includeusing namespace std;int n,m;bool mapp[105][105];int cnt[105];void floyd(){原创 2015-03-10 19:08:47 · 706 阅读 · 0 评论 -
最短路算法学习总结和感悟
总的来说有这些最短路算法:floyd,Dijkstra,Bellman,SPFAfloyd的思想极其精炼,基于动态规划思想,代码极其简单for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]原创 2015-01-21 16:11:34 · 1585 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date(A* - 第K短路)
题意:找第K短路的值思路:A*,bfs找K短路的时候加上估计函数(距离下界),而且要满足:cost(u,v)+h*(u)-h*(v)>=0因为这是bfs'需要的下界函数,不是任何下界都可以,不像IDA*,这里的下界必须让每个bfs的节点保持原样的大小关系而IDDFA中的A*下界函数就不需要这个性质了,只要是下界即可。显然这个具体问题的天然的估计函数就是从此点到目标点的最短路。#原创 2015-03-16 23:41:37 · 616 阅读 · 0 评论 -
HDU 5137 How Many Maos Does the Guanxi Worth(floyd记录路径)
题意:给定N个点和M条边,点编号是1到N。现在要从2到N-1中选择一个删除,同时跟选择的点连接的边也就消失,然后使得点1到N的最短路径的长度最大。如果点1和点N不连通,则输出“Inf"。思路:直接暴力,枚举删去的点即可。我做了一步优化,只删原图最短路上的点, 所以用floyd的时候记录路径即可//Accepted 1164 KB 0 ms #include#include#inclu原创 2015-03-04 17:59:58 · 569 阅读 · 0 评论 -
差分约束系统
差分约束系统X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 不等式组(1) 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。 这个不等式组要么无解,要么就有无数组解。因为如果有转载 2015-02-04 12:53:34 · 708 阅读 · 0 评论 -
POJ 3169 Layout(初遇差分约束系统)
题目链接:http://poj.org/problem?id=3169题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0。这些牛的距离存在着一些约束关系:1.有ML组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 = w。问如果这n头无法排成队伍,则输出-1,如果牛[1]和牛[n]的距离可以无限远,则输出-2,否则则输出牛[1]和牛[n]之间的原创 2015-02-04 17:34:51 · 635 阅读 · 0 评论 -
Dijkstra[两种邻接表+优先队列优化]
Dijksta算法中,如果我们采用的是邻接矩阵来存的,第一点浪费的空间比较多,第二点我们知道算法的时间复杂度在O(n*n),这样的算法可以说并不是很好,所以我们考虑优化它首先我们可以优化存储结构,采用邻接表来存储,其次我们可以用优先队列来排序大小,其时间复杂度大大降低。需要注意的是pair是按照第一个元素的大小排序,如果相同才按照第二个,所以我们要把d[i]包装在第一个元素上。vect原创 2015-01-22 15:20:01 · 3446 阅读 · 0 评论 -
图的邻接表
邻接矩阵和邻接表区别:对于n个顶点,m条边,对于n阶有向完全图最大的m=2*( n-1+(n-2)+(n-3)+...+2+1 )= O(n^2) ,当边数远小于n^2的稀疏图来说用邻接表储存图的空间时间复杂度是O(M),而邻接矩阵储存是O(N^2).邻接表的两种实现方式: 1.用数组实现:int u[ ],v[ ],w[ ]; //分别储存u点,v点,和边权值。int原创 2015-01-14 22:40:01 · 1135 阅读 · 0 评论 -
HDUOJ 1874(最短路dijkstra)
畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 30515 Accepted Submission(s): 11137Problem Description某省自从实行了很多年的畅通工程计划后,终于修原创 2015-01-13 22:40:48 · 670 阅读 · 0 评论 -
用dfs求无向图的割点割边
图的割点简单问题代码模版:输入n,m代表顶点个数和边数,下面m行是m条无向边输出各个割点:#include#include#includeusing namespace std;int n,m,index,root;int v[100],u[100];int first[15],next[100];int time[15],low[15];bool vis[15];v原创 2015-02-02 19:54:09 · 798 阅读 · 0 评论 -
Dijkstra算法(求单源最短路径)
问题描述 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。最短路径的最优子结构性质该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。性质证明:用反证法易证。Dijkstra算法实现ps:用连接矩阵i原创 2015-01-13 18:37:44 · 1095 阅读 · 1 评论 -
Codeforces Round #Pi (Div. 2) E. President and Roads(边双无向图缩点(有重边)+最短路)
E. President and Roadstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputBerland has n cities, the capital is原创 2015-08-08 10:16:10 · 952 阅读 · 0 评论