Remmarguts' Date
Time Limit: 4000MS   Memory Limit: 65536K
Total Submissions:35025   Accepted: 9467

Description

"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

思路
或许将其分在最短路不是特别合适,但是暂时就这样吧
此题为第k短路,用到了a*算法
这是一个神奇的算法。用它来求第k小的话,就是用它不断搜索,即使遇到了终点也不停止。
首先我们知道,这个东西本来就是求最短路的一个算法,所以第一次遇到终点,一定是最短路。遇到终点后,如果不停止,那么接下来,在优先队列里面第二靠近终点的肯定会及时补充上。总之,在这个算法里面,
没有vis数组的限制,又将耗费最小的放在前面,所以第二个到达终点的路径就是第二短的了。
或许这样太过于抽象,但是你只需要记住一点,那就是在这个题目里面的A*算法,它的估计值是精确的,因为我们估计值的来源,是对终点反向图的Dijkstra求出来的。正是这个原因,这个算法跑到的每一次终点
,都是准确的第几小。 代码
#include<iostream>
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;
const int inf = 2100000000;
vector<int>u[200024],w[200024];
vector<int>ux[200024],wx[200024];
bool book[200024];
int dis[200024];
int n,m,s,t,k;
struct node
{
int num;
int dis;
bool operator<(const node x)const
{
return dis>x.dis;
}
}; struct aa
{
int num;
int g,f;
bool operator<(const aa x)const
{
if(x.f==f){return x.g<g;}
return x.f<f;
}
}; void Dijkstra()
{
node exa;
fill(dis,dis+n+5,inf);
priority_queue<node>q;
q.push(node{t,0});
dis[t]=0;
while(!q.empty()){
exa=q.top();q.pop();
if(book[exa.num]){continue;}
book[exa.num]=true;
int siz=ux[exa.num].size();
for(int i=0;i<siz;i++){
if(dis[ux[exa.num][i]]>dis[exa.num]+wx[exa.num][i]){
dis[ux[exa.num][i]]=dis[exa.num]+wx[exa.num][i];
q.push(node{ux[exa.num][i],dis[ux[exa.num][i]]});
}
}
}
} int A_star()
{
aa exa;
if(dis[s]==inf){return -1;}
priority_queue<aa>q;
int cnt = 0;
if(s==t){k++;} int r,g,f;
g=0;f=g+dis[s];
q.push(aa{s,g,f});
while(!q.empty()){
exa= q.top();
q.pop();
r=exa.num;
if(r==t){cnt++;}
if(cnt==k){return exa.g;}
int siz=u[r].size();
for(int i=0;i<siz;i++){
g=exa.g+w[r][i];
f=g+dis[u[r][i]];
q.push(aa{u[r][i],g,f});
}
}
return -1;
} int main()
{
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
u[x].push_back(y);
w[x].push_back(z);
ux[y].push_back(x);
wx[y].push_back(z);
}
scanf("%d%d%d",&s,&t,&k);
Dijkstra();
printf("%d\n",A_star());
return 0;
}

  

												

POJ 2449 Remmarguts' Date (第k短路径)的更多相关文章

  1. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]

    题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...

  2. poj 2449 Remmarguts' Date (k短路模板)

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

  3. poj 2449 Remmarguts' Date 第k短路 (最短路变形)

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 33606   Accepted: 9116 ...

  4. POJ 2449 Remmarguts' Date ( 第 k 短路 && A*算法 )

    题意 : 给出一个有向图.求起点 s 到终点 t 的第 k 短路.不存在则输出 -1 #include<stdio.h> #include<string.h> #include ...

  5. poj 2449 Remmarguts' Date(K短路,A*算法)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013081425/article/details/26729375 http://poj.org/ ...

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

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

  7. POJ 2449 Remmarguts' Date --K短路

    题意就是要求第K短的路的长度(S->T). 对于K短路,朴素想法是bfs,使用优先队列从源点s进行bfs,当第K次遍历到T的时候,就是K短路的长度. 但是这种方法效率太低,会扩展出很多状态,所以 ...

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

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

  9. poj 2449 Remmarguts' Date【第K短路】

    题目 题意:求 点s 到 点t 的 第 k 短 路的距离: 估价函数=当前值+当前位置到终点的距离 f(n)=g(n)+h(n);     g(n)表示g当前从s到p所走的路径的长度,      h( ...

随机推荐

  1. logging 实例

    import logging from logging.handlers import RotatingFileHandler import os FILE_DIR = os.path.join(os ...

  2. Ehlib(Delphi控件) v9.2.024 D7-XE10.2 免费绿色特别版

    下载地址:https://www.jb51.net/softs/579413.html#downintro2 EHLib是一个DELPHI 下的非常棒的第三方Grid控件,比DELPHI自带的强大许多 ...

  3. python之对字符串类型的数组求平均值

    该字符串是在网页表格中复制的,所以数字间由制表符间隔,先将其转换成列表,再进行统计计算.代码如下: str = "-18.1 -18.3 -18 -18.2 -18 -17.4 -18 -1 ...

  4. BizTalk Server 如何处理大消息

    什么是大消息? 遗憾的是,此问题的答案不而直接与特定的消息大小,绑定,取决于你的 Microsoft 的特定瓶颈 BizTalk Server 系统. 与大消息关联的问题可分为以下几类: 内存不足错误 ...

  5. Base64 总结

    Base64编码是解决一些无法打印的字符无法显示的问题,将8位的ascii编码转换为6位的表示64个可见字符的算法. 具体而言,首先将编码每三个分成一组,将三个字符转换为总长为24位的二进制 数字,将 ...

  6. Civil 3D 二次开发 事务

    事务,一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 对于初学者来说,从字面上难以理解什么是事务.下面我试着通过讲述事务的作用及特性来帮 ...

  7. HTML协议

    一,HTML协议 简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的 ...

  8. 【cf789D】Weird journey(欧拉路、计数)

    cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...

  9. Android 性能优化提示

    原文 http://developer.android.com/guide/practices/design/performance.html 性能优化 Android应用程序运行的移动设备受限于其运 ...

  10. Chinese Mahjong UVA - 11210 (DFS)

    先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...