"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story.

"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 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

A 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
A*求k短路
先SPFA求出S到每个点的距离dist
然后从T往前反向A*,now表示当前走的路长,h表示估计到S的估价长度
h=now+dist[v]
然后bfs时维护按h的小根堆,当S第k次经过时,当前now即为答案
 #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的更多相关文章

  1. [poj2449]Remmarguts' Date(spfa+A*)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Remmarguts' Date Time Limit: 4000MS   Mem ...

  2. POJ2449 Remmarguts' Date 第K短路

    POJ2449 比较裸的K短路问题 K短路听起来高大上 实际思路并不复杂 首先对终点t到其他所有点求最短路 即为dist[] 然后由起点s 根据当前走过的距离+dist[]进行A*搜索 第k次到达t即 ...

  3. poj2449 Remmarguts' Date【A*算法】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4303855.html   ---by 墨染之樱花 [题目链接]:http://poj.org/ ...

  4. POJ2449 Remmarguts' Date A*算法

    题意是让求从st的ed第k短路... 考虑A*算法:先把终点到每个点最短路跑出来(注意要建反图),当做估价函数h(u),然后跑A* 每次取出总代价最小的,即g(u)+h(u)最小的进行扩展,注意如果u ...

  5. [poj2449]Remmarguts' Date(K短路模板题,A*算法)

    解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...

  6. poj2449 Remmarguts' Date K短路 A*

    K短路裸题. #include <algorithm> #include <iostream> #include <cstring> #include <cs ...

  7. 【POJ】【2449】Remmarguts' Date

    K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...

  8. poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)

    http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Subm ...

  9. 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 ...

随机推荐

  1. Access数据库自动生成设计文档

    在做Access数据库设计时,常常直接在access文件中建表,建字段,然后写设计文档时,又得重新再写一遍字段和表间关系.其实access数据库自己就支持自动生成数据库文档. 操作方法如下: 数据库工 ...

  2. 第一次作业:扑通扑通 我的IT

    让我掉下眼泪的不止昨夜的酒,还有这满屏的代码. 第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 在炎炎的夏日,伴随这高三的结束,我也面临大学专业的选择,我看着书里密 ...

  3. alpha-咸鱼冲刺day2

    一,合照 emmmmm.自然是没有的. 二,项目燃尽图 三,项目进展 今天并没有什么进展,弄了好久好像也只研究出怎么把JS的功能块插入进去.html的信息提交这些还不知道要怎么弄. 四,问题困难 日常 ...

  4. 冲刺每日报告--Day1

    敏捷冲刺每日报告--Day1 情况简介 由于李世钰同学出差了,周六才能回来.所以我们只能先写爬虫,封装代码提供接口等他回来调用. 任务进度 赵坤:编写了基本爬虫代码,目前能在国内有版权的B站.爱奇艺中 ...

  5. Linux中Eclipse下搭建Web开发环境

    0. 准备工作 java环境,Linux下基本上都有含开源jdk的库,可直接下载,且不用配置环境变量,当然也可以官网下载后自己配置: Eclipse Neon,注意看清是64位还是32位,下载的应该是 ...

  6. Ubuntu下安装gsoap

    昨天在ubuntu下进行安装gSOAP,费了很多时间,没成功,今天又来找了大量教程资料,终于一次成功,这里写下自己的安装步骤和方法,供大家参考. 首先下载gsoap,我下载的是gsoap-2.8.1. ...

  7. Flask 学习 五 电子邮件

    pip install mail from flask_mail import Mail # 邮件配置 app.config['MAIL_SERVER']='smtp.qq.com' app.conf ...

  8. Struts2之Action的实现

    对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filte ...

  9. nyoj 鸡兔同笼

    鸡兔同笼 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡和兔的数目,如果无解,则输出"No an ...

  10. nyoj 对决

    对决 时间限制:1000 ms  |  内存限制:65535 KB 难度:0   描述 Topcoder 招进来了 n 个新同学,Yougth计划把这个n个同学分成两组,要求每组中每个人必须跟另一组中 ...