dijkstra

hdu 1595 最短路算法dijkstra

时光怂恿深爱的人放手 提交于 2020-01-20 10:06:33
find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2094 Accepted Submission(s): 739 Problem Description Marica is very angry with Mirko because he found a new girlfriend and she seeks revenge.Since she doesn't live in the same city, she started preparing for the long journey.We know for every road how many minutes it takes to come from one city to another. Mirko overheard in the car that one of the roads is under repairs, and that it is blocked, but didn't konw exactly which road. It is possible to come from

HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

余生颓废 提交于 2020-01-20 05:34:58
畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15713 Accepted Submission(s): 5371 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。 Input 本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。 接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。 再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。 Output 对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出

PAT Travel Plan(dijkstra应用)

泄露秘密 提交于 2020-01-20 00:35:00
简介: 写这道题的时候思路很清晰,毕竟只是套个模板。 思路: Dijkstra 算法直接用就行。第一遍提交就AC了,果然c++做算法题比Java好用太多了(~ ̄▽ ̄)~ PS: 具体请看注释(好久没写这么多注释了(‾◡◝) #include <bits/stdc++.h> //这个库包了目前c++所有的头文件。 #define INF 0x3f3f3f3f //设置无穷大 using namespace std; int n,m,s,d; struct node{ int dis,cos; }city[505][505];//结构体存储路径,花费. bool vis[505];// 节点是否被访问过 int cost[505],dist[505],path[505];//记录从起点到每个节点的花费,路径长度,path数组以前驱记录的形式记忆路径。 int main() { scanf("%d %d %d %d",&n,&m,&s,&d); for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ city[i][j].dis = i == j ? 0 : INF; city[i][j].cos = i == j ? 0 : INF; } }//初始化每个节点的数据,INF即初始每个节点之间都是不可达的,花费也无穷大。 int w,v

Dijkstra Floyed SPFA 辨析

蓝咒 提交于 2020-01-19 16:48:07
一、Dijkstra O(nlogn) 单源最短路径 这个算法加上堆优化之后还是非常推荐的 但是dijkstra有一些不足的地方 边权不能为负数 不能判断负环 二、SPFA 最大是 O(mn) 单源最短路径 这个算法其实还是非常玄学的 要是运气不好的话会到达O(mn) 所以 不好掌控时间复杂度 但是它也有一些得天独厚的优势 它可以有负权边 也可以判断负环 判断负环的方法: 如果一个顶点入队列的次数超过n次 说明该图中存在负环 三、Floyed O(n^3) 多源最短路径 这个算法跑的很慢 在n不大的情况下可以用用 但是它 可以算出任意两个点之间的最短路径 还是非常不错的 来源: https://www.cnblogs.com/akioi/p/12214003.html

Dijkstra强大应用之次短路

白昼怎懂夜的黑 提交于 2020-01-19 15:28:49
我们知道dijkstra可以求最短路,但是它还有一个更为强大的应用, dijkstra求次短路。 我们来看这强大的算法吧。 旅行 旅行团每天固定的从S城市出发到达T城市,为了省油要求尽量走最短路径或比最短路径长1单位距离的路径,求满足条件的路径条数。 如上图:S=1,T=5,则有两条最短路,1->2->5和1->3->5 长度都为6,另外还有一条长度为7, 1->3->4->5 输入: 第一行一个数,表示数据的组数。 对于每组数据,第一行两个数,N和M,2 ≤ N ≤ 1, 000,1 ≤ M ≤ 10, 000,分别表示城市数和路的条数。 接下来M行,每行三个数A,B和L,1 ≤ A, B ≤ N,A <> B且 1 ≤ L ≤ 1, 000,表示有一条路从城市A到城市B,长度为L。道路是单向的,可能有多条路从A到B。 接下来一行,两个数S和T,1 ≤ S, F ≤ N,S<>T,表示起点城市和终点城市。 数据保证S和T间至少有一条路。 输出: 每组数据一个数,表示路径条数,答案不超过1 000 000 000. 样例: Sample Input 2 5 8 1 2 3 1 3 2 1 4 5 2 3 1 2 5 3 3 4 2 3 5 4 4 5 3 1 5 5 6 2 3 1 3 2 1 3 1 10 4 5 2 5 2 7 5 2 7 4 1 Sample Output 3

Dijkstra graph with a table of weights on each edge

混江龙づ霸主 提交于 2020-01-19 05:19:27
问题 I have a boost graph with multiples weights for each edges (imagine one set of weights per hour of the day). Every one of those weights values is stored in a propretyEdge class : class propretyEdge { std::map<std::string,double> weights; // Date indexed } I created a graph with those properties, and then filled it with the right values. The problem is now that I want to launch the Dijkstra algorithm over a particular set of weight on the graph : for example a function that could be : void

P1144 最短路计数· BFS/dijkstra

為{幸葍}努か 提交于 2020-01-17 22:30:21
题解 其实题目很简单不写了,这里总结一下从这道题目里学到的知识: 当最短路的边权都是1时,dijkstra/spfa 就是 BFS 如果使用优先队列,内部结构是pair<int,int>时,dis[v]=dis[u]+1使得当前路成为新的最短路,这条路在优先队列里的级别变高,应该使用 q.push(make_pair{-dis[v],v}) ,有负号哦! BFS版: dijkstra版: # include <bits/stdc++.h> using namespace std ; typedef pair < int , int > pii ; const int INF = 0x3f3f3f3f ; const int mod = 100003 ; const int N = 1e6 + 10 ; vector < int > g [ N ] ; int vis [ N ] , dis [ N ] ; int ans [ N ] ; int n , m ; priority_queue < pii > q ; void dijkstra ( ) { memset ( dis , INF , sizeof dis ) ; dis [ 1 ] = 0 ; ans [ 1 ] = 1 ; q . push ( { 0 , 1 } ) ; while ( q . size ( ) )

【堆优化Dijkstra】BZOJ4152- [AMPPZ2014]The Captain

社会主义新天地 提交于 2020-01-16 14:43:38
【题目大意】 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用。 【思路】 按照某维坐标排序,相邻两个点在这一维度上的差值最小,所以两两连边,长度为这一维度上的差值(不用考虑另外一维度的,就算另外一维度的更小,在连另外一维度的时候也能够抵达)。然后跑最短路即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 typedef long long ll; 9 const ll INF=1e15; 10 const int MAXN=200000+50; 11 struct node 12 { 13 int x,y,id; 14 }p[MAXN]; 15 struct edge 16 { 17 int to,len; 18 }; 19 vector<edge> E[MAXN]; 20 int n; 21 priority_queue<pair<ll,int>,vector<pair<ll,int> >,greater<pair<ll,int> > > que; 22

医院设置【Dijkstra】

青春壹個敷衍的年華 提交于 2020-01-16 00:12:13
Time Limit:10000MS Memory Limit:65536K Total Submit:145 Accepted:110 Case Time Limit:1000MS Description   设有一棵二叉树(如右图)。其中,圈中的数字表示结点中居民的人口。圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为 1 1 1 。如 右图中,若医院建在:    1 1 1 处,则距离和 = 4 + 12 + 2 ∗ 20 + 2 ∗ 40 = 136 =4+12+2*20+2*40=136 = 4 + 1 2 + 2 ∗ 2 0 + 2 ∗ 4 0 = 1 3 6    3 3 3 处,则距离和 = 4 ∗ 2 + 13 + 20 + 40 = 81 =4*2+13+20+40=81 = 4 ∗ 2 + 1 3 + 2 0 + 4 0 = 8 1     …………. Input 第一行一个整数 n n n ,表示树的结点数。 ( n < = 100 ) (n<=100) ( n < = 1 0 0 ) 接下来的 n n n 行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,其中:第一个数为居民人口数;第二个数为左链接,为 0 0 0 表示无链接;第三个数为右链接。 Output

最短路dijkstra—MPI Maelstrom(POJ - 1502)

半腔热情 提交于 2020-01-14 19:53:31
题目链接: >_> 题目:MPI Maelstrom BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distributed shared memory machine with a hierarchical communication subsystem. Valentine McKee’s research advisor, Jack Swigert, has asked her to benchmark the new system. ‘‘Since the Apollo is a distributed shared memory machine, memory access and communication times are not uniform,’’ Valentine told Swigert. ``Communication is fast between processors that share the same memory subsystem, but it is slower between processors that are not on the same subsystem. Communication