即求从起点到终点至少走K条路的最短路径。

用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大于K条边的当做K条边来处理就好了。求最短路的三个算法都可以做,我这里用的是SPFA,比较简洁。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#define Mod 1000000007
using namespace std;
#define N 5007vector<pair<int,int> > G[N];
int w[N][57],inq[N][57];
int s,t,n,m,k,res;
struct node
{int u,e;node(int _u,int _e){u = _u;e = _e;}node(){}
};void SPFA(int s)
{int u,v,e,i,j,len;for(i=0;i<=n;i++){for(j=0;j<=50;j++){w[i][j] = Mod;inq[i][j] = 0;}}queue<node> que;res = Mod;while(!que.empty())que.pop();w[s][0] = 0;inq[s][0] = 1;que.push(node(s,0));while(!que.empty()){node tmp = que.front();que.pop();u = tmp.u;e = tmp.e;if(u == t && e == k)res = min(w[u][e],res);inq[u][e] = 0; //释放int ka;if(e+1 > k)ka = k;elseka = e+1;for(i=0;i<G[u].size();i++){v = G[u][i].first;len = G[u][i].second;if(w[v][ka] > len + w[u][e]){w[v][ka] = len + w[u][e];if(!inq[v][ka]){inq[v][ka] = 1;que.push(node(v,ka));}}}}
}int main()
{int u,v,wi,i,j;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<=5000;i++)G[i].clear();while(m--){scanf("%d%d%d",&u,&v,&wi);G[u].push_back(make_pair(v,wi));G[v].push_back(make_pair(u,wi));}scanf("%d%d%d",&s,&t,&k);SPFA(s);if(res == Mod)puts("-1");elseprintf("%d\n",res);}return 0;
}

View Code

转载于:https://www.cnblogs.com/whatbeg/p/3765634.html

UESTC 915 方老师的分身II --最短路变形相关推荐

  1. UESTC 915 -- 方老师的分身 II (spfa,dijkstra)

    题目大意:求从一个点到另一个点至少经过k条路径的最短路径长度: 思路分析:用两个变量u和e来维护一个点的dis,u表示当前点的编号,e表示经过多少条边,dis[u][e] 表示走到u点经过e条边的最短 ...

  2. UESTC_方老师的分身 II CDOJ 915

    方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  3. UESTC 914 方老师的分身I Dijkstra

    题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...

  4. cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】

    http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memo ...

  5. uestc 方老师的分身 III 拓扑排序

    没什么好说的.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include< ...

  6. uestc 851 方老师与素数

    看了大牛的代码 新技能get√ 如何优雅的计算广搜的次数 1 #include<cstdio> 2 #include<cstring> 3 #include<cstrin ...

  7. cdoj916-方老师的分身 III 【拓扑排序】

    http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others)     Memo ...

  8. 帮助方老师使用固态硬盘安装win10,赚了150软妹币(但是他赖账了!)

    作为一个计算机专业的,具体点是软件工程,每次别人问自己是干啥的,总会被带入到对方的节奏:哦,能装系统,会修电脑... 今天方老师(一起工作了4年多的曾经是个真正的老湿!搞艺术的!已经提了离职报告了,不 ...

  9. 计算机网络笔记——概述、物理层、链路层(方老师408课程)

    文章目录 前言 互联网概述 互联网发展的三个阶段 互联网标准化机构 互联网的组成 边缘部分的通信方式 核心部分的交换方式 我国计算机网络的发展 计算机网络的类别 计算机网络的性能 速率.带宽.吞吐量 ...

最新文章

  1. 权威发布 |《科学美国人》:2018全球十大新兴技术
  2. Visual C++ Windows 用来定位 DLL 的搜索路径
  3. 操作系统服务:logging日志记录模块
  4. linux下varnish4配置语法(基础)
  5. C#引用类型转换的几种方式
  6. linux查找并删除进程,linux中查找并kill一个名为server的进程
  7. $ionicPopup
  8. 单片机蜂鸣器编程音乐_基于单片机的智能鱼缸温控系统设计
  9. 主窗体的常用属性 c# 1615011872
  10. try catch finally return的执行顺序与返回值探究
  11. MSSQL coalesce系统函数简介
  12. CC2530射频通信
  13. 怎么在计算机上面掉出CMD,cmd怎么打开(cmd命令入侵老师电脑)
  14. 用 Python 帮女友修改微信运动步数,妹子直呼内行
  15. Bert入门学习过程记录
  16. Java绘画板源码_Java 绘图板 示例源码下载(画板)
  17. Excel基础(03)查找与替换
  18. 各大牛逼网站推荐系统
  19. Jupyter 运行py文件 踩过的坑和方法
  20. SpringBoot+Vue项目校园商铺系统

热门文章

  1. 金山毒霸四月安全趋势 继续关注网页挂马
  2. 能在CAD2004以下版本里面打开2007以上版本文件的外挂
  3. Linux支持exFAT和NTFS
  4. 老师必备的数学课件制作工具,双十二别错过
  5. Adobe Premiere Pro CC 2018启动卡住问题
  6. DEDECMS中,引入文件
  7. 网络规划设计师如何复习?
  8. 开源一个基于天天团购的团购app
  9. 假期听书友福利-(lian)(ting)(网)有声小说下载脚本
  10. 获取本机CPU,硬盘等使用情况