#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
const int L = ;
const int inf = <<;
struct node
{
int now,g,f;
bool operator <(const node a)const
{
if(a.f == f) return a.g < g;
return a.f < f;
}
};
struct edges
{
int x,y,w,next;
} e[L<<],re[L<<];//e是输入给出的定向图,re为其逆向图,用于求t到其他所有点的最短路径 int head[],dis[],vis[],n,m,k,s,t,rehead[]; void Init()//初始化
{
memset(e,-,sizeof(e));
memset(re,-,sizeof(re));
for(int i = ; i<=n; i++)
{
dis[i] = inf;
vis[i] = ;
head[i] = -;
rehead[i] = -;
}
} void AddEdges(int x,int y,int w,int k)
{
e[k].x = x,e[k].y = y,e[k].w = w,e[k].next = head[x],head[x] = k;
re[k].x = y,re[k].y = x,re[k].w = w,re[k].next = rehead[y],rehead[y] = k;
} int relax(int u,int v,int c)
{
if(dis[v]>dis[u]+c)
{
dis[v] = dis[u]+c;
return ;
}
return ;
} void SPFA(int src)
{
int i;
dis[src] = ;
queue<int> Q;
Q.push(src);
while(!Q.empty())
{
int u,v;
u = Q.front();
Q.pop();
vis[u] = ;
for(i = rehead[u]; i!=-; i = re[i].next)
{
v = re[i].y;
if(relax(u,v,re[i].w) && !vis[v])
{
Q.push(v);
vis[v] = ;
}
}
}
} int Astar(int src,int to)
{
priority_queue<node> Q;
int i,cnt = ;
if(src == to) k++;//在起点与终点是同一点的情况下,k要+1
if(dis[src] == inf) return -;
node a,next;
a.now = src;
a.g = ;
a.f = dis[src];
Q.push(a);
while(!Q.empty())
{
a = Q.top();
Q.pop();
if(a.now == to)
{
cnt++;
if(cnt == k)
return a.g;
}
for(i = head[a.now]; i!=-; i = e[i].next)
{
next = a;
next.now = e[i].y;
next.g = a.g+e[i].w;
next.f = next.g+dis[next.now];
Q.push(next); }
}
return -;
} int main()
{
int i,j,x,y,w;
while(~scanf("%d%d",&n,&m))
{
Init();
for(i = ; i<m; i++)
{
scanf("%d%d%d",&x,&y,&w);
AddEdges(x,y,w,i);
}
scanf("%d%d%d",&s,&t,&k);
SPFA(t);
printf("%d\n",Astar(s,t));
} return ;
}

K短路 spfa + A*的更多相关文章

  1. BZOJ 1975: [Sdoi2010]魔法猪学院 大水题 第k短路 spfa

    https://www.lydsy.com/JudgeOnline/problem.php?id=1975 我好像到现在了第k短路都不会写,mdzz. 先spfa求出最短路,然后扫点存各种前置路径已经 ...

  2. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  3. BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...

  4. UESTC - 1987 童心未泯的帆宝和乐爷 (第k短路 A*算法+SPFA算法 模板)

    传送门: http://www.qscoj.cn/#/problem/show/1987 童心未泯的帆宝和乐爷 Edit Time Limit: 10000 MS     Memory Limit: ...

  5. 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)

    第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...

  6. BZOJ-1975: 魔法猪学院 (K短路:A*+SPFA)

    题意:有N种化学元素,有M种转化关系,(u,v,L)表示化学物质由u变为v需要L能量,现在你有E能量,问最多有多少种不同的途径,使得1转为为N,且总能量不超过E. 思路:可以转为为带权有向图,即是求前 ...

  7. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

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

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

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

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

随机推荐

  1. ScrollView嵌套GridView不显示顶部

    /*     * scrollView中嵌套GridView不能显示头部     *      * 方案①:scrollView.smoothScrollTo(0, 0);     *      * ...

  2. windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊?

    并没有my.ini文件,只有一个my-default.ini文件,并且里面并没有max_connections windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊 ...

  3. SQL--CLR概述

    Visual Studio 2005  支持在 SQL Server 2005 中开发.部署和调试托管代码.有一种新的项目类型(称为 SQL Server 项目),它允许开发人员在 SQL Serve ...

  4. UI Framework-1: views Windowing

    views Windowing views provides support for creating dialog boxes and other kinds of windows through ...

  5. ELK安装笔记

    1.jdk安装 2.logstash安装使用 #命令方式[root@ELK ELK]# tar xf logstash-5.3.2.tar.gz [root@ELK logstash-5.3.2]# ...

  6. GIL解释锁及进程池和线程池

    官方介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nati ...

  7. MySql中允许远程连接

    要达到这个目的需要实现两点 开通用户权限 解除本地绑定 开通用户权限 首先登陆服务器端的mysql //不使用空格可以直接登陆 mysql -u用户名 -p密码 mysql> use mysql ...

  8. Unity Shader (三)Surface Shader机制

    转自:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的机制一直是 ...

  9. asp.net.core网站重启后登陆无效问题(部署在IIS)

    一.问题 在使用asp.net.core时,把网站发布到IIS后,在后续更新中需要停止网站,然后重启网站,发现已经登陆的用户会退出登陆.过程如下 1.登陆代码(测试) [AllowAnonymous] ...

  10. 杯子 (glass)

    题目 试题1:杯子 (glass)  源代码:glass.cpp  输入文件:glass.in  输出文件:glass.out  时间限制:1s  空间限制:256MB 题目描述 小明买了N个容积可以 ...