uestc 方老师的分身 II
题意:求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相关推荐
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC 915 -- 方老师的分身 II (spfa,dijkstra)
题目大意:求从一个点到另一个点至少经过k条路径的最短路径长度: 思路分析:用两个变量u和e来维护一个点的dis,u表示当前点的编号,e表示经过多少条边,dis[u][e] 表示走到u点经过e条边的最短 ...
- UESTC 915 方老师的分身II --最短路变形
即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...
- uestc 方老师的分身 III 拓扑排序
没什么好说的.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include< ...
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memo ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...
- cdoj916-方老师的分身 III 【拓扑排序】
http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others) Memo ...
- 帮助方老师使用固态硬盘安装win10,赚了150软妹币(但是他赖账了!)
作为一个计算机专业的,具体点是软件工程,每次别人问自己是干啥的,总会被带入到对方的节奏:哦,能装系统,会修电脑... 今天方老师(一起工作了4年多的曾经是个真正的老湿!搞艺术的!已经提了离职报告了,不 ...
- 计算机网络笔记——概述、物理层、链路层(方老师408课程)
文章目录 前言 互联网概述 互联网发展的三个阶段 互联网标准化机构 互联网的组成 边缘部分的通信方式 核心部分的交换方式 我国计算机网络的发展 计算机网络的类别 计算机网络的性能 速率.带宽.吞吐量 ...
- uestc 851 方老师与素数
看了大牛的代码 新技能get√ 如何优雅的计算广搜的次数 1 #include<cstdio> 2 #include<cstring> 3 #include<cstrin ...
最新文章
- 英特尔加注RISC-V:砸10亿投资,还加入其国际基金会
- iOS 导航栏实现总结
- Qt4_使用项视图的简便类
- 2017.8.11 think list
- 第六版PMBOK中工具与技术的介绍:数据收集数据分析数据表现
- linux 终止作业任务命令,linux-尝试终止进程时出错—“ kill:pid:参数必须是进程或作业ID”...
- java基于springboot+vue的虚拟游戏道具交易商城 element
- Mac 终端所有命令失效
- Python:实现integer partition整数分区算法(附完整源码)
- 使用kindlegen转换工具将电子书epub到mobi格式时遇到错误(prcgen):E24010:超链接:display:none
- python括号是中文还是英文_Python括号约定
- 一段的冷笑话已经很直白的说明了三方的关系
- 心理压力测试脸型软件,性格测试心理推断:脸型是你内心一面镜子(一)
- 倍福Wince系统存储容量StorageMemory和ProgramMemory设置
- 查看Linux内核、CPU、内存及各组件版本的命令和方法
- (转自Unity官方)2D游戏开发套件指南
- 专业素养计算机,我对计算机学科核心素养的理解
- 基于Milvus向量引擎的WPS智能写作平台架构实践
- 获取屏幕大小 android,Android获取屏幕大小
- Python模拟登录淘宝都实现了,你还怕模拟登录?