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 ...
随机推荐
- react的基本使用,及常用填坑
import React, { Component } from 'react'; import PropTypes from 'prop-types'; import './First.css'; ...
- Beta 第七天
今天遇到的困难: 构造新适配器的时候出现了某些崩溃的问题 ListView监听器有部分的Bug 今天完成的任务: 陈甘霖:完成相机调用和图库功能,完成阿尔法项目遗留下来的位置调用问题,实现百度定位 蔡 ...
- 201621123057 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- 201621123031 《Java程序设计》第11周学习总结
作业11-多线程 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread ...
- JAVA中最容易让人忽视的基础。
可能很多找编程工作的人在面试的时候都有这种感受,去到一个公司填写面试试题的时候,多数人往往死在比较基础的知识点上.不要奇怪,事实就是如此一般来说,大多数公司给出的基础题大概有122道,代码题19道左右 ...
- 2017 清北济南考前刷题Day 3 morning
实际得分:100+0+0=100 T1 右上角是必败态,然后推下去 发现同行全是必胜态或全是必败态,不同行必胜必败交叉 列同行 所以n,m 只要有一个是偶数,先手必胜 #include<cstd ...
- ajax实现无刷新分页效果
基于jquery.pagination.js实现的无刷新加载分页数据效果. 简介与说明 * 该插件为Ajax分页插件,一次性加载数据,故分页切换时无刷新与延迟.如果数据量较大,加载会比较慢. * 分页 ...
- Python基础学习篇章二
一. Python如何运行程序 1. 在交互模式下编写代码 最简单的运行Python程序的方法是在Python交互命令行中输入程序.当然有很多方法可以开始这样的命令行,比如IDE,系统终端.如果你已经 ...
- Python内置函数(26)——enumerate
英文文档: enumerate(iterable, start=0) Return an enumerate object. iterable must be a sequence, an itera ...
- Zepto.js库touch模块代码解析
Zepto.js也许并不陌生,专门针对移动端开发,Zepto有一些基本的触摸事件可以用来做触摸屏交互(tap事件.swipe事件),Zepto是不支持IE浏览器的. 下面来解析一些Zepto.js触摸 ...