求第k短路的长度,如果没有,输出-1。

/*
k短路模板
注意当s=t时,k++。
*/
#include<iostream>
#include<cstdio>
#include<queue>
#define N 1010
#define M 100010
using namespace std;
int head1[N],head2[N],dis[N],vis[N],n,m,k,cnt;
bool flag;
struct node
{
int v,pre,t;
};node e1[M],e2[M];
struct Node
{
int from,g,f;
bool operator< (Node x) const
{
if(x.f!=f)return x.f<f;
return x.g<g;
}
};
void add(int i,int x,int y,int z)
{
e1[i].v=y;
e1[i].t=z;
e1[i].pre=head1[x];
head1[x]=i;
e2[i].v=x;
e2[i].t=z;
e2[i].pre=head2[y];
head2[y]=i;
}
void spfa(int s,int t)
{
queue<int> q;
for(int i=;i<=n;i++)dis[i]=N*M;
vis[s]=;dis[s]=;
q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();
vis[x]=;
for(int i=head2[x];i;i=e2[i].pre)
if(dis[e2[i].v]>dis[x]+e2[i].t)
{
dis[e2[i].v]=dis[x]+e2[i].t;
if(!vis[e2[i].v])
{
vis[e2[i].v]=;
q.push(e2[i].v);
}
}
}
}
void a_star(int s,int t)
{
if(s==t)k++;
priority_queue<Node> q;
Node u;u.from=s;u.g=;u.f=dis[s];
q.push(u);
while(!q.empty())
{
u=q.top();q.pop();
if(u.from==t)
{
cnt++;
if(cnt==k)
{
printf("%d",u.f);
flag=true;
return;
}
}
for(int i=head1[u.from];i;i=e1[i].pre)
{
Node v;
v.from=e1[i].v;
v.g=u.g+e1[i].t;
v.f=v.g+dis[e1[i].v];
q.push(v);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(i,x,y,z);
}
int s,t;
scanf("%d%d%d",&s,&t,&k);
spfa(t,s);
a_star(s,t);
if(!flag)printf("-1");
return ;
}

Remmarguts’ Date(poj 2449)的更多相关文章

  1. 【POJ】2449 Remmarguts' Date(k短路)

    http://poj.org/problem?id=2449 不会.. 百度学习.. 恩. k短路不难理解的. 结合了a_star的思想.每动一次进行一次估价,然后找最小的(此时的最短路)然后累计到k ...

  2. POJ 2449:Remmarguts' Date(A* + SPFA)

    题目链接 题意 给出n个点m条有向边,源点s,汇点t,k.问s到t的第k短路的路径长度是多少,不存在输出-1. 思路 A*算法是启发式搜索,通过一个估价函数 f(p) = g(p) + h(p) ,其 ...

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

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

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

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

  5. POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang

    题目大意:给你一个有向图,并给你三个数s.t 和 k ,让你求从点 s 到 点 t 的第 k 短的路径.如果第 k 短路不存在,则输出“-1” ,否则,输出第 k 短路的长度. 解题思路:这道题是一道 ...

  6. POJ 2449 Remmarguts' Date (第k短路径)

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

  7. POJ——2449Remmarguts' Date(A*+SPFA)

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 26504   Accepted: 7203 ...

  8. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  9. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

随机推荐

  1. 汇编程序49:实验14 访问CMOS RAM(显示系统时间)

    assume cs:code ;安装程序,使用指令out和in指令 code segment start: mov ax,cs mov ds,ax mov si,offset sub1 mov ax, ...

  2. 循环语言(for)

    循环语句: 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句,如果满足则进入for语句循环,for语句内的代码执行完毕之后,将按照状态改变改变变量,然后判断是否符合循环条件,符合继 ...

  3. Apache Calcite项目简介

    文章导读: 什么是Calcite? Calcite的主要功能? 如何快速使用Calcite? 什么是Calcite Apache Calcite是一个动态数据管理框架,它具备很多典型数据库管理系统的功 ...

  4. Python学习日记之忽略删除字符串空白

    使用Python自带的函数strip可以剔除字符串开头.结尾.两端的空白 使用场景:用户输入验证 strip : 去除字符串两端的空白 rstrip : 去除字符串末尾(右端)的空白 lstrip : ...

  5. tensorboard在windows系统浏览器显示空白的解决

    一个简单的using_tensorboard.py程序,如下: #using_tensorboard.py import tensorflow as tf a = tf.constant(10,nam ...

  6. Reuse a SSL socket

    It's possible to reuse a SSL socket after proper cleanup. See SSL Socket free and shutdown on stacko ...

  7. Java_数组1_16.5.12

    声明整型数组a: int[] a; 这时,只声明了变量a,还应该使用new运算符创建数组: int[] a=new int [100];(数组长度不要求是一个常量:new int[n]会创建一个长度为 ...

  8. Python的伪造数据库:Faker

    faker 是一个可以让你生成伪造数据的Python包,在软件需求.开发.测试过程中常常需要利用一些假数据来做测试,这种时候就可以使用 Faker 来伪造数据从而用来测试. 一.Faker安装 pip ...

  9. 模拟title提示!

    转载http://wouit.com/post/2013-08-15/40052169981html <a href="#" tishi="常见的网页新闻循环跳动显 ...

  10. maven引入的包无法使用 解决方法

    如果正常引入后在依赖中能够找到包,但是打不开 1.有可能是包下载不完整 把maven下载源由国外转成阿里镜像源找到 maven 的配置文件: settings.xml 文件: <mirror&g ...