题意:求s到t走过边数大于k的最短路

思路:邻接表实现,用w[u][e]来维护(看的大牛博客),u表示当前点,e表示已经经过多少条边。感觉有点类似DP。

在边数大于k的处理上,发现还是使之等于k(K<=50),节省存储空间。

spfa算法实现。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<map>
 9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<cmath>
13 #include<stdlib.h>
14 #include<vector>
15 #define INF 1000000007
16 #define MAXN 5010
17 #define maxn 1000010
18 #define Mod 1000007
19 #define N 1010
20 using namespace std;
21 typedef long long LL;
22
23 struct node{
24     int u, e;
25 };
26 int n, m, u, v, wt;
27 int s, t, k;
28 int ans;
29 int dist[MAXN][55];
30 bool inq[MAXN][55];
31 vector< pair<int, int> > G[MAXN];
32
33 void spfa(int s)
34 {
35     int u, v, e, i, j, len;
36     for (i = 0; i <= n; ++i)
37         for (j = 0; j <= 50; ++j) {
38             dist[i][j] = INF;
39             inq[i][j] = 0;
40         }
41     queue<node> q;
42     ans = INF;
43     dist[s][0] = 0;
44     inq[s][0] = true;
45     q.push({s,0});
46     while (!q.empty()) {
47         node tmp = q.front();
48         q.pop();
49         u = tmp.u;
50         e = tmp.e;
51         if (u == t && e == k)
52             ans = min(dist[u][e],ans);
53         inq[u][e] = false;
54         int time;
55         if (e + 1 > k) time = k;
56         else time = e + 1;
57         for (i = 0; i < G[u].size(); ++i) {
58             v = G[u][i].first;
59             len = G[u][i].second;
60             if (dist[v][time] > len + dist[u][e]) {
61                 dist[v][time] = len + dist[u][e];
62                 if (!inq[v][time]) {
63                     q.push({ v, time });
64                     inq[v][time] = true;
65                 }
66             }
67         }
68     }
69 }
70
71 int main()
72 {
73     while (cin >> n >> m) {
74         for (int i = 0; i < MAXN; ++i) G[i].clear();
75         for (int i = 0; i < m; ++i) {
76             cin >> u >> v >> wt;
77             G[u].push_back({ v, wt });
78             G[v].push_back({ u, wt });
79         }
80         cin >> s >> t >> k;
81         spfa(s);
82         if (ans == INF) puts("-1");
83         else cout << ans << endl;
84     }
85     return 0;
86 }

转载于:https://www.cnblogs.com/usedrosee/p/4294791.html

uestc 方老师的分身 II相关推荐

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

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

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

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

  3. UESTC 915 方老师的分身II --最短路变形

    即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...

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

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

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

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

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

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

  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课程)

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

  10. uestc 851 方老师与素数

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

最新文章

  1. 英特尔加注RISC-V:砸10亿投资,还加入其国际基金会
  2. iOS 导航栏实现总结
  3. Qt4_使用项视图的简便类
  4. 2017.8.11 think list
  5. 第六版PMBOK中工具与技术的介绍:数据收集数据分析数据表现
  6. linux 终止作业任务命令,linux-尝试终止进程时出错—“ kill:pid:参数必须是进程或作业ID”...
  7. java基于springboot+vue的虚拟游戏道具交易商城 element
  8. Mac 终端所有命令失效
  9. Python:实现integer partition整数分区算法(附完整源码)
  10. 使用kindlegen转换工具将电子书epub到mobi格式时遇到错误(prcgen):E24010:超链接:display:none
  11. python括号是中文还是英文_Python括号约定
  12. 一段的冷笑话已经很直白的说明了三方的关系
  13. 心理压力测试脸型软件,性格测试心理推断:脸型是你内心一面镜子(一)
  14. 倍福Wince系统存储容量StorageMemory和ProgramMemory设置
  15. 查看Linux内核、CPU、内存及各组件版本的命令和方法
  16. (转自Unity官方)2D游戏开发套件指南
  17. 专业素养计算机,我对计算机学科核心素养的理解
  18. 基于Milvus向量引擎的WPS智能写作平台架构实践
  19. 获取屏幕大小 android,Android获取屏幕大小
  20. Python模拟登录淘宝都实现了,你还怕模拟登录?

热门文章

  1. 【基础】深度学习最常用的10个激活函数!(数学原理+优缺点)
  2. Linux下与github建立ssh连接
  3. Python——numpy排序 求和
  4. 吴恩达深度学习——深度学习的实用指南
  5. 数据中台公开课丨可以复用的中台架构建设经验与实践
  6. 从对工作流理论发展的理解到jBPM4的设计思想
  7. 驱动开发——经典图书免费试读下载及勘误讨论
  8. 如何成为一名出色的演说者
  9. 3.7 Spark RDD编程
  10. 意境级讲解二分查找算法、python