POJ2449 Remmarguts' Date
"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
<= 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
(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
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long lol;
struct Node
{
int next,to;
lol dis;
}edge1[],edge2[];
int num1,num2,head1[],head2[];
lol dist[],ans,inf;
int S,T,k,tot,n,m;
bool vis[];
struct ZYYS
{
lol now,h;
int id;
bool operator <(const ZYYS &b)
const
{
if (h==b.h) return now>b.now;
return h>b.h;
}
};
void add1(int u,int v,lol d)
{
num1++;
edge1[num1].next=head1[u];
head1[u]=num1;
edge1[num1].to=v;
edge1[num1].dis=d;
}
void add2(int u,int v,lol d)
{
num2++;
edge2[num2].next=head2[u];
head2[u]=num2;
edge2[num2].to=v;
edge2[num2].dis=d;
}
void SPFA()
{int i;
queue<int>Q;
memset(dist,/,sizeof(dist));
inf=dist[];
Q.push(S);
dist[S]=;
while (Q.empty()==)
{
int u=Q.front();
Q.pop();
vis[u]=;
for (i=head1[u];i;i=edge1[i].next)
{
int v=edge1[i].to;
if (dist[v]>dist[u]+edge1[i].dis)
{
dist[v]=dist[u]+edge1[i].dis;
if (vis[v]==)
{
vis[v]=;
Q.push(v);
}
}
}
}
}
void Astar()
{int i;
if (S==T) k++;
priority_queue<ZYYS>Q;
ZYYS tmp;
if (dist[T]==inf) return;
tmp.id=T;tmp.now=;tmp.h=dist[T];
Q.push(tmp);
while (Q.empty()==)
{
tmp=Q.top();
Q.pop();
if (tmp.id==S)
{
++tot;
if (tot==k)
{
ans=tmp.now;
return;
}
}
for (i=head2[tmp.id];i;i=edge2[i].next)
{
int v=edge2[i].to;
ZYYS to;
to.id=v;
to.now=tmp.now+edge2[i].dis;
to.h=to.now+dist[v];
Q.push(to);
}
}
}
int main()
{int i,u,v;
lol d;
cin>>n>>m;
for (i=;i<=m;i++)
{
scanf("%d%d%lld",&u,&v,&d);
add1(u,v,d);
add2(v,u,d);
}
cin>>S>>T>>k;
SPFA();
Astar();
if (tot!=k) printf("-1");
else
cout<<ans;
}
POJ2449 Remmarguts' Date的更多相关文章
- [poj2449]Remmarguts' Date(spfa+A*)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Remmarguts' Date Time Limit: 4000MS Mem ...
- 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短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...
- poj2449 Remmarguts' Date K短路 A*
K短路裸题. #include <algorithm> #include <iostream> #include <cstring> #include <cs ...
- 【POJ】【2449】Remmarguts' Date
K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...
- poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)
http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
随机推荐
- 冲刺NO.11
Alpha冲刺第十一天 站立式会议 项目进展 项目进入尾声,主要测设工作完成过半,项目总结也开始进行. 问题困难 项目的困难现阶段主要是测试过程中存在一些"盲点"很难发现或者发现后 ...
- 《Language Implementation Patterns》之 解释器
前面讲述了如何验证语句,这章讲述如何构建一个解释器来执行语句,解释器有两种,高级解释器直接执行语句源码或AST这样的中间结构,低级解释器执行执行字节码(更接近机器指令的形式). 高级解释器比较适合DS ...
- 2017-2018-1 我爱学Java 第八周 作业
团队六七周作业 团队分工 UML图 工具选择 小编(金立清)有话说 参考资料 团队分工 返回目录 UML图 用例图 类图 活动图 状态图 返回目录 工具选择 ProcessOn - 免费在线作图,实时 ...
- Python IDE Spyder的简单介绍
最近深度学习发展非常迅猛,大有一统江湖的趋势.经过一段时间学习,发现自己对这种神奇的玄学非常感兴趣,希望能够进一步的研究.而这种研究性学科单纯地看论文比较难以明白,所以希望能够跟进大牛们写的代码深入学 ...
- Angular组件——组件生命周期(一)
组件声明周期以及angular的变化发现机制 红色方法只执行一次. 变更检测执行的绿色方法和和组件初始化阶段执行的绿色方法是一个方法. 总共9个方法. 每个钩子都是@angular/core库里定义的 ...
- SecureCRT 7.3注册机激活
SecureCRT是一款很好用的远程登陆管理工具 工具和注册机下载链接:http://pan.baidu.com/s/1jImWiMU 密码:0yox 以管理管运行keygen.exe(一定要以管理员 ...
- Python内置函数(14)——bytes
英文文档: class bytes([source[, encoding[, errors]]]) Return a new "bytes" object, which is an ...
- sts 和 lombok
1.安装lombok.jar到sts.exe所在目录 如果是eclipse,需要放到eclipse.exe所在目录,同理myeclipse. 2.修改sts.ini配置使用lombok 如果是ecli ...
- SpringCloud的应用发布(四)vmvare+linux,网关代理
一.配置方式 1.代理同一个Eureka中注册的服务 2.代理url 二.访问方式:get - list 1.直接访问应用 2.代理访问应用
- GIT入门笔记(2)- 典型的工作模式
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库. 下图是经典的git开发过程. Git的功能特性: ...