【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=1598

【算法】

A*求k短路

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1010
#define MAXM 10010
const int INF = 2e9; int i,n,m,k,tot,rtot,u,v,w;
int head[MAXN],rhead[MAXN],dist[MAXN]; struct Edge
{
int to,w,nxt;
} e[MAXM<<];
struct info
{
int s,d;
friend bool operator < (info a,info b)
{
return a.d + dist[a.s] > b.d + dist[b.s];
}
}; inline void add(int u,int v,int w)
{
tot++;
e[tot] = (Edge){v,w,head[u]};
head[u] = tot;
tot++;
e[tot] = (Edge){u,w,rhead[v]};
rhead[v] = tot;
}
inline void dijkstra(int s)
{
int i,u,v,w;
static bool visited[MAXN];
priority_queue< pair<int,int> > q;
while (!q.empty()) q.pop();
memset(visited,false,sizeof(visited));
for (i = ; i <= n; i++) dist[i] = INF;
dist[s] = ;
q.push(make_pair(,s));
while (!q.empty())
{
u = q.top().second;
q.pop();
if (visited[u]) continue;
visited[u] = true;
for (i = rhead[u]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (dist[u] + w < dist[v])
{
dist[v] = dist[u] + w;
q.push(make_pair(-dist[v],v));
}
}
}
}
inline void Astar(int s,int t)
{
int i,v,w,cnt = ;
priority_queue< info > q;
info cur;
while (!q.empty()) q.pop();
q.push((info){s,});
while (!q.empty())
{
cur = q.top();
q.pop();
if (cur.s == t)
{
cnt++;
if (cnt <= k) printf("%d\n",cur.d);
else break;
}
for (i = head[cur.s]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
q.push((info){v,cur.d+w});
}
}
for (i = ; i <= k - cnt; i++) printf("-1\n");
} int main()
{ scanf("%d%d%d",&n,&m,&k);
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
dijkstra();
Astar(n,); return ; }

最新文章

  1. UIlabel的字体自适应属性
  2. jsp学习之基于mvc学生管理系统的编写
  3. JS小数点加减乘除运算后位数增加的解决方案
  4. throw跟throws关键字
  5. linux服务方式启动程序脚本(init.d脚本)
  6. iOS的动画效果类型及实现方法
  7. 【BZOJ】【1927】【SDOI2010】星际竞速
  8. 老去的JEE,焕发生命
  9. awk参数详解
  10. 关于socket的关闭:close和shutdown
  11. Eclipse创建一个JAVA WEB项目
  12. Loadrunner 11 中Run-Time Setting详细参数说明
  13. Redis消息通知(任务队列和发布订阅模式)
  14. [转]Python中出错:ImportError: No module named win32com.client
  15. DB2创建function(一)
  16. BZOJ2655 calc(动态规划+拉格朗日插值法)
  17. Keystone-manage 命令
  18. CodeForces 832B Petya and Exam
  19. SQL事务在存储过程的应用
  20. EXCEPTION-javaBean

热门文章

  1. 控制台——args参数的赋值方法
  2. js 攻坚克难
  3. 【译】x86程序员手册10 - 第4章系统架构
  4. Struts2框架实现简单的用户登入
  5. HDU_1698_Just a Hook_线段树区间更新
  6. 扩增子图表解读1箱线图:Alpha多样性
  7. Requests库 更新中
  8. NTP测试1
  9. node版本管理工具nvm安装使用教程
  10. uva1584 Circular Sequence(Uva-1584)