UESTC_方老师的分身 II CDOJ 915
方老师的分身 II
Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
方老师计算出了走路时间最长的那个分身所用的时间。于是有个特殊的分身(据说是方老师真身!)就不想如此古板的走最短路了!由于这个分身的特殊性,这个分身对于单向边可以当双向边走。但是这个特殊的分身想走最短路的同时,要求至少经过k条边。
Input
有多组数据
第一行两个整数n,m(1≤n≤5000,1≤m≤100000)表示有n个教室,m条边。
接下来m行,每行3个数,u,v,t。表示u,v间有一条长度为t的边。
最后一行三个整数s,t,k,表示起点、终点、至少经过k(k≤50)条边。
Output
一个整数,表示最短路径长度。如果无解输出−1。
每组数据占一行。
Sample input and output
Sample Input | Sample Output |
---|---|
4 4 1 2 1 2 3 2 1 3 100 3 4 1 1 3 5 |
7 |
Source
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #define pb push_back using namespace std; const int maxn = 5e3 + 50; int mincost[maxn][50+5]; bool inqueue[maxn][50+5];typedef struct Edge {int target,cost;Edge(int target ,int cost){this->target = target , this->cost = cost; } };typedef struct status {int pos,step; status(int pos,int step){this->pos = pos , this->step = step;} };queue<status>q; vector<Edge>E[maxn]; int n,m,st,ed,k;void bfs() {mincost[st][0] = 0;q.push(status(st,0));while(!q.empty()){int pos = q.front().pos , step = q.front().step ; q.pop();int thiscost = mincost[pos][step];inqueue[pos][step] = false;for(int i = 0 ; i < E[pos].size() ; ++ i){int nextnode = E[pos][i].target;int thisstep = min(52,step+1);if (mincost[nextnode][thisstep] == -1 || mincost[nextnode][thisstep] > thiscost + E[pos][i].cost){mincost[nextnode][thisstep] = thiscost + E[pos][i].cost;if (!inqueue[nextnode][thisstep]){q.push(status(nextnode,thisstep));inqueue[nextnode][thisstep] = true;}}}} }int main(int argc,char *argv[]) {while(~scanf("%d%d",&n,&m)){memset(mincost,-1,sizeof(mincost));memset(inqueue,false,sizeof(inqueue));for(int i = 1 ; i <= m ; ++ i){int u,v,t;scanf("%d%d%d",&u,&v,&t);E[u].pb(Edge(v,t));E[v].pb(Edge(u,t));}scanf("%d%d%d",&st,&ed,&k);bfs();int ans = mincost[ed][k];for(int i = k + 1 ; i <= 52 ; ++ i)if (mincost[ed][i] != -1){if (ans == -1)ans = mincost[ed][i];ans = min (ans , mincost[ed][i]);}printf("%d\n",ans);for(int i = 1 ; i <= n ; ++ i)E[i].clear();}return 0; }
转载于:https://www.cnblogs.com/Xiper/p/4515727.html
UESTC_方老师的分身 II CDOJ 915相关推荐
- 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条边,所以大 ...
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
http://acm.uestc.edu.cn/#/problem/show/915 方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memo ...
- uestc 方老师的分身 III 拓扑排序
没什么好说的.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include< ...
- 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课程)
文章目录 前言 互联网概述 互联网发展的三个阶段 互联网标准化机构 互联网的组成 边缘部分的通信方式 核心部分的交换方式 我国计算机网络的发展 计算机网络的类别 计算机网络的性能 速率.带宽.吞吐量 ...
- 快速滚动_方老师教滚动快速作文
五年级第一单元作文集阴沉天空中有一小束照着你的阳光.亲爱的孩子,让时间在知识的枝条上.智慧的绿叶上.成熟的果实上留下它勤奋的印痕!罗婉汀作文集 自律且努力,别让生活太安逸.亲爱的孩子,耕耘者最信 ...
最新文章
- JAVA面向对象的特征
- 正则截取指定字符串 php,php截取指定字符串除了正则还有什么方法
- Python中单下划线开头的特性
- Codevs 1010 过河卒 2002年NOIP全国联赛普及组
- Python之深入解析Python技能树的测评分析
- QQ for Linux下载、安装、运行、卸载
- Linux常用文件和目录操作
- redis tomcat session
- 自监督学习在CV领域研究进展总结
- 一次线上Nginx出问题排错经历
- 《我也能做CTO之程序员职业规划》之三:曲线定律
- JavaSE 学习参考:枚举类型
- java实验报告实验环境_Java实验报告一:Java开发环境的熟悉
- niceScroll 的使用
- HDU 6080 度度熊保护村庄(计算几何+floyd)
- 学的计算机专业不会编程,学计算机专业的不会编程啊怎么办?
- xsmax无法进入dfu模式_iPhoneXS/XR:强制重启,进入DFU、恢复模式
- 爬虫破解js加密破解(二) 有道词典js加密参数 sign破解
- 一点点墨水滴在纸上写出来的字体
- 汇编Ch.5 Ch.6笔记