博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
阅读量:7228 次
发布时间:2019-06-29

本文共 1684 字,大约阅读时间需要 5 分钟。

方老师的分身 II

Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

方老师计算出了走路时间最长的那个分身所用的时间。于是有个特殊的分身(据说是方老师真身!)就不想如此古板的走最短路了!由于这个分身的特殊性,这个分身对于单向边可以当双向边走。但是这个特殊的分身想走最短路的同时,要求至少经过k条边。

Input

有多组数据

第一行两个整数nm1n50001m100000)表示有n个教室,m条边。

接下来m行,每行3个数,uvt。表示uv间有一条长度为t的边。

最后一行三个整数stk,表示起点、终点、至少经过kk50)条边。

Output

一个整数,表示最短路径长度。如果无解输出1

每组数据占一行。

Sample input and output

Sample Input Sample Output
4 41 2 12 3 21 3 1003 4 11 3 5
7

 

 

 

题解:在基础的最短路上加了限制条件:不小于k的长度。于是可以在距离数组dis上加一维状态,dis[i][j]表示到达节点i已经过j条边的最短路,达到目的。这里采用的是spfa,dijkstra也可。

这里简单说下spfa的算法:

•就搞一个队列。一开始把起点压进去。每次弹出一个点,把和这个点有边直接相连的点都更新一遍,如果当前算出的距离小于之前算出的距离,就把值改成当前算的,然后看这个新点,如果不在队列中就压入队列。
•当队列为空时,就可以得到所有点到起点的距离。
代码:
1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 const int INF=0x7fffffff;10 const int N=5005;11 const int M=200005;12 const int K=51;13 queue
> q;14 int n,m,s,t,k;//s->begin; t->end.15 int head[N],later[M],u[M],v[M],w[M];16 int dis[N][K];//到达第i个节点已经过k条边,此时的最短距离17 bool b[N][K];18 19 void spfa();20 21 int main()22 {23 //freopen("D:\\input.in","r",stdin);24 //freopen("D:\\output.out","w",stdout);25 while(~scanf("%d%d",&n,&m)){26 memset(head,-1,sizeof(head));27 for(int i=0;i
tmp=q.front();52 q.pop();53 b[tmp.first][tmp.second]=0;54 for(int i=head[tmp.first];i!=-1;i=later[i]){55 int tt=min(tmp.second+1,k);//边数大于k的都当做k来处理56 if(dis[v[i]][tt]>dis[tmp.first][tmp.second]+w[i]){57 dis[v[i]][tt]=dis[tmp.first][tmp.second]+w[i];58 if(!b[v[i]][tt])//避免重复入队59 q.push(make_pair(v[i],tt)),b[v[i]][tt]=1;60 }61 }62 }63 }

转载地址:http://wfdfm.baihongyu.com/

你可能感兴趣的文章
tranform知多少
查看>>
Android电量优化
查看>>
[爬虫手记] 我是如何在3分钟内开发完一个爬虫的
查看>>
【译】Css Grid VS Flexbox: 实践比较
查看>>
iOS 开发知识索引
查看>>
Linux iptables命令
查看>>
webpack的使用
查看>>
干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
查看>>
D3.js入门
查看>>
一次和前端的相互甩锅的问题记录
查看>>
纯OC实现iOS DLNA投屏功能了解一下
查看>>
RxJava -- fromArray 和 Just 以及 interval
查看>>
LC #75 JS
查看>>
js正则验证代码库
查看>>
常见面试题—css实现垂直水平居中
查看>>
lc682. Baseball Game
查看>>
重学前端-css选择器
查看>>
iOS开发之扫描二维码
查看>>
Android黑科技: 快速找到view所在的xml文件
查看>>
linux分区方案
查看>>