K短路裸题。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Edge{
int too, nxt, val;
}edge[100005];
struct Odge{
int too, nxt, val;
}odge[100005];
struct Node{
int idd, hfc, gfc;
bool operator<(const Node &x)const{
return hfc+gfc>x.hfc+x.gfc;
}
}d[1000005];//n*k
int n, m, s, t, k, uu, vv, ww, hea[1005], oea[1005], cnt, ont, dis[1005];
int din, tms[1005], ans;
bool vis[1005];
void add_edge(int fro, int too, int val){
edge[++cnt].nxt = hea[fro];
edge[cnt].too = too;
edge[cnt].val = val;
hea[fro] = cnt;
}
void add_odge(int fro, int too, int val){
odge[++ont].nxt = oea[fro];
odge[ont].too = too;
odge[ont].val = val;
oea[fro] = ont;
}
void dijkstra(){
memset(dis, 0x3f, sizeof(dis));
dis[t] = 0;
for(int i=1; i<=n; i++){
int mini=0;
for(int j=1; j<=n; j++)
if(!vis[j] && dis[mini]>dis[j])
mini = j;
vis[mini] = true;
if(!mini) return ;
for(int i=oea[mini]; i; i=odge[i].nxt){
int v=odge[i].too;
dis[v] = min(dis[v], odge[i].val+dis[mini]);
}
}
}
void aStar(){
d[++din] = (Node){s, 0, 0};
while(din){
Node j=d[1];
pop_heap(d+1, d+1+din);
din--;
tms[j.idd]++;
if(j.idd==t && tms[t]==k){
printf("%d\n", j.hfc+j.gfc);
return ;
}
if(tms[j.idd]>k) continue;
for(int i=hea[j.idd]; i; i=edge[i].nxt)
if(tms[edge[i].too]<=k){
d[++din] = (Node){edge[i].too, j.hfc+edge[i].val, dis[edge[i].too]};
push_heap(d+1, d+1+din);
}
}
cout<<"-1\n";
}
int main(){
cin>>n>>m;
for(int i=1; i<=m; i++){
scanf("%d %d %d", &uu, &vv, &ww);
add_edge(uu, vv, ww);
add_odge(vv, uu, ww);
}
cin>>s>>t>>k;
if(s==t) k++;
dijkstra();
aStar();
return 0;
}

最新文章

  1. html或者jsp页面引用jar包中的js文件
  2. ubuntu下的第一个脚本file.sh
  3. 隐藏与显示:display/visibility/visible区别
  4. linux C 管道
  5. ES6 入门系列 - 函数的扩展
  6. shell脚本变量定义注意别跟系统变量重名了……
  7. iOS工程预编译文件的创建
  8. php三元运算
  9. DrawerLayout学习笔记
  10. 一篇%3CDIV%20style%3D%22FONT-SIZE%
  11. 大雄和哆啦A梦
  12. java基础回顾(一)
  13. iOS 接收新消息通知调用系统声音 震动
  14. EF学习笔记(九):异步处理和存储过程
  15. 基于CRM跟进(活动)记录中关键字识别的客户跟进加权值的成单概率算法
  16. python 贝叶斯算法
  17. .net网站上传图片换电脑不显示
  18. Android:视频(VideoView/MediaPlayer)
  19. PYTHON-基本数据类型-数字类型,字符串类型,列表类型-练习
  20. [math][mathematica] archlinux 下 mathematica 的安装 (科学计算软件 mathematica/matlab/sagemath)

热门文章

  1. 常用API(正则表达式、Date、DateFormat、Calendar)
  2. java es 骤合操作
  3. 利用mysqldump备份magento数据库
  4. vuejs 学习旅程之 vue-resource
  5. 零基础逆向工程21_PE结构05_数据目录表_导出表
  6. 解决easyUI下拉控件无法触发onkeydown事件
  7. SPEC CPU 使用简介
  8. Jquery 日期差函数 修改 对火狐进行兼容
  9. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周期)
  10. EasyUI Tabs + Yii2.0实现iframe方式打开页面(解决共用静态文件引入加载的问题)