[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
first line contains two integer numbers N and M (1 <= N <= 1000, 0
<= M <= 100000). Stations are numbered from 1 to N. Each of the
following M lines contains three integer numbers A, B and T (1 <= A, B
<= N, 1 <= T <= 100). It shows that there is a directed
sideway from A-th station to B-th station with time T.
The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).
Output
single line consisting of a single integer number: the length (time
required) to welcome Princess Uyuw using the K-th shortest path. If K-th
shortest path does not exist, you should output "-1" (without quotes)
instead.
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短路了
#include <iostream>
#include <sstream>
#include <ios>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <vector>
#include <string>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <climits>
#include <cctype>
using namespace std;
#define XINF INT_MAX
#define INF 0x3FFFFFFF
#define MP(X,Y) make_pair(X,Y)
#define PB(X) push_back(X)
#define REP(X,N) for(int X=0;X<N;X++)
#define REP2(X,L,R) for(int X=L;X<=R;X++)
#define DEP(X,R,L) for(int X=R;X>=L;X--)
#define CLR(A,X) memset(A,X,sizeof(A))
#define IT iterator
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<PII> VII;
typedef vector<int> VI;
int s ,t,k;
const int maxn=;
vector<PII>G[maxn];
vector<PII>rG[maxn];
int dis[maxn];
int used[maxn];
void init(int n)
{
memset(used,,sizeof(used));
for(int i=;i<n;i++)
{
dis[i]=INF;
G[i].clear();
rG[i].clear();
}
}
void add_edge(int u,int v,int w){
G[u].push_back(make_pair(v,w));
rG[v].push_back(make_pair(u,w));
}
void spfa()
{
queue<int>q;
q.push(t);
used[t]=;
dis[t]=;
while(!q.empty())
{
int u=q.front();
for(int i=;i<rG[u].size();i++)
{
int v=rG[u][i].first;
int y=rG[u][i].second;
if(dis[u]+y<dis[v])
{
dis[v]=dis[u]+y;
if(!used[v])
{
used[v]=;
q.push(v);
}
}
}
q.pop();
used[u]=;
}
}
int A_star()
{
priority_queue<pair<int,PII>,vector<pair<int,PII> >,greater<pair<int,PII> > >q;
q.push(make_pair(dis[s],make_pair(,s)));
CLR(used,);
while(!q.empty())
{
pair<int,PII> p=q.top();
q.pop();
int f=p.first;
int g=p.second.first;
int u=p.second.second;
used[u]++;
if(used[t]==k)return f;
if(used[u]>k)continue;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i].first;
int d=G[u][i].second;
q.push(make_pair(g+dis[v]+d,make_pair(g+d,v)));
}
}
return -;
}
int main()
{
ios::sync_with_stdio(false);
int n,m;
while(cin>>n>>m)
{
int u,v,w;
init(n);
for(int i=;i<m;i++)
{
cin>>u>>v>>w;
add_edge(--u,--v,w);
}
cin>>s>>t>>k;
s--;t--;
spfa();
if(s==t)k++;
cout<<A_star()<<endl;
}
return ;
}
代码君
[poj2449]Remmarguts' Date(spfa+A*)的更多相关文章
- POJ2449 Remmarguts' Date
"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...
- [poj2449]Remmarguts' Date(K短路模板题,A*算法)
解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- POJ2449 Remmarguts' Date 第K短路
POJ2449 比较裸的K短路问题 K短路听起来高大上 实际思路并不复杂 首先对终点t到其他所有点求最短路 即为dist[] 然后由起点s 根据当前走过的距离+dist[]进行A*搜索 第k次到达t即 ...
- poj2449 Remmarguts' Date【A*算法】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4303855.html ---by 墨染之樱花 [题目链接]:http://poj.org/ ...
- POJ2449 Remmarguts' Date A*算法
题意是让求从st的ed第k短路... 考虑A*算法:先把终点到每个点最短路跑出来(注意要建反图),当做估价函数h(u),然后跑A* 每次取出总代价最小的,即g(u)+h(u)最小的进行扩展,注意如果u ...
- poj2449 Remmarguts' Date K短路 A*
K短路裸题. #include <algorithm> #include <iostream> #include <cstring> #include <cs ...
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
- poj 2449 Remmarguts' Date 第k短路 (最短路变形)
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 33606 Accepted: 9116 ...
- poj 2449 Remmarguts' Date (k短路模板)
Remmarguts' Date http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
随机推荐
- hdu5353 Average(模拟)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Average Time Limit: 4000/2000 MS (Java/Ot ...
- No2_1.接口继承多态_Java学习笔记_接口
接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...
- java基础知识再学习--集合框架-对象的强、软、弱和虚引用
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/53092 本文 ...
- 64位Ubuntu14.04搭建ADT开发环境
本来放假是要出去玩的,结果出游计划拖到了周一,今天先来无事看看ubuntu最近发展得怎么样了,顺便把ADT也搭建好,方便以后研究android框架.想想在windows下,ADT直接down下来解压就 ...
- easyui 添加dialog
javascript //查看角色所属用户 function roleuser(obj, id) { var C_ID = id; var Url = "/Sys/RoleUserName& ...
- 使用Hexo搭建GitPage
资料: hexo官方文档:https://hexo.io/zh-cn/docs/ jekyll官方文档:http://jekyll.com.cn/docs/home/ 简介: 使用hexo和jekyl ...
- 【CCNA学习笔记】1.思科路由器的基本配置
教学视频来源:http://edu.51cto.com/lesson/id-10930.html. 怎么安装模块.连交叉线什么的视频里面老师说的很清楚了,我只记录一下IOS配置的命令(虽然一副不明觉厉 ...
- Android Development Tools 发生checkAndLoadTargetData错误
之前使用时没有出现任何问题的,我把D:\IDE\ADT\adt-bundle-windows-x86_64-20140321\eclipse目录下面的 eclipse.exe重名名为adt.exe并设 ...
- MySQL表复制
http://www.2cto.com/database/201202/120259.html http://www.cnblogs.com/sunss/archive/2010/10/08/1845 ...
- Powershell 快捷键
Powershell的快捷键和cmd,linux中的shell,都比较像. ALT+F7 清除命令的历史记录PgUp PgDn 显示当前会话的第一个命令和最后一个命令Enter 执行当前命令End 将 ...