#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. SharePoint 第一个网站

    第一个网站 1.建立一个社区门户网站首先要建一个IIS网站,并且把匿名访问勾选上,这样才能真正的访问网站. 创建网站的时候更改自己想要的端口,以便操作 这里更改网站是否启用匿名访问权限.点击是 然后保 ...

  2. Spring mvc 启动 和 请求分发

    Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...

  3. grvphviz && dot脚本语言

    安装graphviz 可去官网下载http://www.graphviz.org/download/下载之后按步骤安装 打开编辑器,创建*.dot文件,编辑dot脚本代码,保存. D:\>dot ...

  4. AIX 6.1 Oracle 10G 数据库GoldenGate实施

    安装环境说明: 源端:AIX 6.1 10.190.1.215 目标端:Linux 10.191.1.10 1:源端创建goldengate 表空间. 表空间的要求:最小500m,大点3-5G,设置自 ...

  5. 初学者指南:ZFS 是什么,为什么要使用 ZFS?

    作者: John Paul 译者: LCTT Lv Feng 今天,我们来谈论一下 ZFS,一个先进的文件系统.我们将讨论 ZFS 从何而来,它是什么,以及为什么它在科技界和企业界如此受欢迎. 虽然我 ...

  6. javascript上下文this

    js的四种调用方式: 一 作为函数的调用: 在严格模式下this,undefined,在非严格模式下指向全局window对象. 二 作为方法调用: this通常指向调用的对象 三 作为构造函数的调用: ...

  7. CSU 1446 Modified LCS 扩展欧几里得

    要死了,这个题竟然做了两天……各种奇葩的错误…… HNU的12831也是这个题. 题意: 给你两个等差数列,求这两个数列的公共元素的数量. 每个数列按照以下格式给出: N F D(分别表示每个数列的长 ...

  8. 网络载入数据和解析JSON格式数据案例之空气质量监測应用

    一.创建一个新的项目 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  9. POJ 1035-Spell checker(字符串)

    题目地址:POJ 1035 题意:输入一部字典.输入若干单词. 若某个单词能在字典中找到,则输出corret.若某个单词能通过 变换 或 删除 或 加入一个字符后.在字典中找得到.则输出这些单词.输出 ...

  10. bzoj 2120 数颜色 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23990489 [原题] 2120: 数颜色 Time Limit: 6 Sec  M ...