[poj2449]Remmarguts' Date(spfa+A*)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud
Time Limit: 4000MS | Memory Limit: 65536K | |
Total Submissions: 21855 | Accepted: 5958 |
Description
"Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Princess Uyuw on a diplomatic mission."
"Erenow, the princess sent Remmarguts a letter, informing him that she would come to the hall and hold commercial talks with UDF if and only if the prince go and meet her via the K-th shortest path. (in fact, Uyuw does not want to come at all)"
Being interested in the trade development and such a lovely girl, Prince Remmarguts really became enamored. He needs you - the prime minister's help!
DETAILS: UDF's capital consists of N stations. The hall is numbered S, while the station numbered T denotes prince' current place. M muddy directed sideways connect some of the stations. Remmarguts' path to welcome the princess might include the same station twice or more than twice, even it is the station with number S or T. Different paths with same length will be considered disparate.
Input
The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).
Output
Sample Input
2 2 1 2 5 2 1 4 1 2 2
Sample Output
14
题意:求第K短路
分析:spfa+A*
先spfa反向求最短路,然后根据A*来搞,f(x)=g(x)+h(x)
h(x)表示从终点反向到x点的最短距离,g(x)表示从起点到x的当前距离,在终点出队K次的时候所求的距离即为第K短路。
即我们每次都优先查找当前总的路程最短的路径,则在终点出队K次之后,即为第k短路了
1 #include <iostream> 2 #include <sstream> 3 #include <ios> 4 #include <iomanip> 5 #include <functional> 6 #include <algorithm> 7 #include <vector> 8 #include <string> 9 #include <list> 10 #include <queue> 11 #include <deque> 12 #include <stack> 13 #include <set> 14 #include <map> 15 #include <cstdio> 16 #include <cstdlib> 17 #include <cmath> 18 #include <cstring> 19 #include <climits> 20 #include <cctype> 21 using namespace std; 22 #define XINF INT_MAX 23 #define INF 0x3FFFFFFF 24 #define MP(X,Y) make_pair(X,Y) 25 #define PB(X) push_back(X) 26 #define REP(X,N) for(int X=0;X<N;X++) 27 #define REP2(X,L,R) for(int X=L;X<=R;X++) 28 #define DEP(X,R,L) for(int X=R;X>=L;X--) 29 #define CLR(A,X) memset(A,X,sizeof(A)) 30 #define IT iterator 31 typedef long long ll; 32 typedef pair<int,int> PII; 33 typedef vector<PII> VII; 34 typedef vector<int> VI; 35 int s ,t,k; 36 const int maxn=1010; 37 vector<PII>G[maxn]; 38 vector<PII>rG[maxn]; 39 int dis[maxn]; 40 int used[maxn]; 41 void init(int n) 42 { 43 memset(used,0,sizeof(used)); 44 for(int i=0;i<n;i++) 45 { 46 dis[i]=INF; 47 G[i].clear(); 48 rG[i].clear(); 49 } 50 } 51 void add_edge(int u,int v,int w){ 52 G[u].push_back(make_pair(v,w)); 53 rG[v].push_back(make_pair(u,w)); 54 } 55 void spfa() 56 { 57 queue<int>q; 58 q.push(t); 59 used[t]=1; 60 dis[t]=0; 61 while(!q.empty()) 62 { 63 int u=q.front(); 64 for(int i=0;i<rG[u].size();i++) 65 { 66 int v=rG[u][i].first; 67 int y=rG[u][i].second; 68 if(dis[u]+y<dis[v]) 69 { 70 dis[v]=dis[u]+y; 71 if(!used[v]) 72 { 73 used[v]=1; 74 q.push(v); 75 } 76 } 77 } 78 q.pop(); 79 used[u]=0; 80 } 81 } 82 int A_star() 83 { 84 priority_queue<pair<int,PII>,vector<pair<int,PII> >,greater<pair<int,PII> > >q; 85 q.push(make_pair(dis[s],make_pair(0,s))); 86 CLR(used,0); 87 while(!q.empty()) 88 { 89 pair<int,PII> p=q.top(); 90 q.pop(); 91 int f=p.first; 92 int g=p.second.first; 93 int u=p.second.second; 94 used[u]++; 95 if(used[t]==k)return f; 96 if(used[u]>k)continue; 97 for(int i=0;i<G[u].size();i++) 98 { 99 int v=G[u][i].first; 100 int d=G[u][i].second; 101 q.push(make_pair(g+dis[v]+d,make_pair(g+d,v))); 102 } 103 } 104 return -1; 105 } 106 int main() 107 { 108 ios::sync_with_stdio(false); 109 int n,m; 110 while(cin>>n>>m) 111 { 112 int u,v,w; 113 init(n); 114 for(int i=0;i<m;i++) 115 { 116 cin>>u>>v>>w; 117 add_edge(--u,--v,w); 118 } 119 cin>>s>>t>>k; 120 s--;t--; 121 spfa(); 122 if(s==t)k++; 123 cout<<A_star()<<endl; 124 } 125 return 0; 126 }
代码君
转载于:https://www.cnblogs.com/fraud/p/4160419.html
[poj2449]Remmarguts' Date(spfa+A*)相关推荐
- poj2449 Remmarguts' Date(第k短路问题)(A*+spfa/dijkstra)
思路来源 https://blog.csdn.net/berrykanry/article/details/78345894(通俗易懂解释好评) https://www.cnblogs.com/yyf ...
- Poj2449 Remmarguts' Date 【A*搜索】K短路
http://poj.org/problem?id=2449 A*搜索求K短路. #include <cstdio> #include <cstring> #include & ...
- POJ 2449 Remmarguts' Date [第k短路]
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu Descripti ...
- 【POJ】【2449】Remmarguts' Date
K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...
- POJ - 2449 Remmarguts' Date(第k短路:spfa+A*)
题目链接:点击查看 题目大意:给出一个有向图,求第k短路 题目分析:偷学了一波A*,本来以为是多难的算法,其实就是bfs+优先队列的升级版,之前看的那些博客写的都太深奥了,以至于看了一半啥都没看懂然后 ...
- Remmarguts' Date(POJ2449+最短路+A*算法)
题目链接:http://poj.org/problem?id=2449 题目: 题意:求有向图两点间的k短路. 思路:最短路+A*算法 代码实现如下: 1 #include <set> 2 ...
- poj 2449 Remmarguts' Date 启发式搜索 A*算法
做这个题算是学了学spfa算法,一开始感觉spfa和dij好像:dij找最小点松弛,spfa就是一个一个的松弛,松到不能松. 求S到T的第K短路 思路:这个算法的思路是从源点S优雅的暴力跑bfs,用优 ...
- POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...
- POJ 2449 Remmarguts' Date(k短路模板)
link:https://vjudge.net/problem/POJ-2449 前面输入与大多最短路题相同 最后一行输入s,t,k 求从s到t的第K短路 wiki link: https://en. ...
- POJ 2449 Remmarguts' Date
POJ_2449 一开始我的思路就是把图上每个点搞一个容量不小于K的最大堆和最小堆,最小堆用于取当前该节点的第某短路值,最大堆用来保存前K小的最短路. 最后为了每次能查询全局最小值,再把N个点放到一个 ...
最新文章
- 新冠能被根除吗?医学顶刊BMJ:比根除天花难不少、比脊髓灰质炎容易一点
- 三十八、页面分配策略
- slider_wap
- leetcode算法题--Can I Win
- 控制台输入与Math Random的基本使用
- hdu1568斐波那契前4位
- Baseline needs more love
- Repeater控件的分隔线
- unity 草 可以一棵棵种吗?_这种野草人称“瓜子金”,1斤能卖50多,拔1棵少棵很珍贵...
- 【Java】选择结构排坑指南
- [Ext JS6]Microloader - 微加载器
- GitHub+Hexo 搭建个人网站
- create-react-app 自定义 eslint 配置
- 适用于Mac的WinX HD视频转换器:视频转换教程
- java listener 原理_Java三大器之监听器(Listener)的工作原理和代码演示
- 嵩天老师python123测验_嵩天老师python123测验4: 程序的控制结构 (第4周)
- mysql-mmm架构深度详解
- 【STM32】Fault 类异常_记一次STM32中HardFault问题的调试解决
- 【计蒜客】等边三角形
- 十二小时制和二十四小时制之间的区别
热门文章
- js文件里获取路由 vue_纯js文件中,怎么使用vue的路由
- 跑毒的乌龟-0 : 随机漫步
- jsoup html to text,Jsoup和htmlunit结合使用。
- Redis Zadd 命令 Redis 有序集合(sorted set)Redis Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,那么更新
- hadoop与hive
- 简单机器学习系统的构建以及对于不对称性的分类介绍和性能评价
- 建模大师怎么安装到revit中_用协同大师完成Revit协同工作的教程详解
- DBPN:Deep Back-Projection Networks For Super-Resolution
- 【机器学习系列】EM算法第三讲:由Jensen Inequality推导EM算法
- Chapter 1 : MySQL体系结构和搜索引擎