博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1724(ROADS)
阅读量:5323 次
发布时间:2019-06-14

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

有限制的单源最短路。

题目大意:给定一个图,图中的每条边有一个长度和一个费用,给出最大费用,求在不超过最大费用的前提下的最短路(从s到e)。

我的解法是BFS+优先队列,我们可以把<d,t,i>看成状态,i为结点编号,d为结点到源点的距离,t为目前剩余的费用,每次BFS时都选取d最小的状态进行扩展,直到到达目标结点。一开始,我还担心内存会爆掉,但是一下也没想到其他方法,就照这个想法写了,结果居然AC了。

由于要用到优先队列,所以只好临时学了一点STL,第一次提交是忘改用c++提交,CE了一次。

View Code
1 #include 
2 #include
3 #include
4 #define N 101 5 #define M 10001 6 7 using namespace std; 8 typedef pair
,int> node; 9 priority_queue
,greater
> pq;10 11 int n,m;12 int u[M],v[M],d[M],t[M],next[M];13 int first[N];14 15 int main()16 {17 int i,j,k,e,di,ti,ans;18 node tmp;19 while(~scanf("%d%d%d",&k,&n,&m))20 {21 for(e=1;e<=m;e++)22 {23 scanf("%d%d%d%d",&u[e],&v[e],&d[e],&t[e]);24 next[e]=first[u[e]];25 first[u[e]]=e;26 }27 pq.push(make_pair(make_pair(0,k),1));28 ans=-1;29 while(!pq.empty())30 {31 tmp=pq.top(),pq.pop();32 if(ans!=-1) continue;33 i=tmp.second;34 di=tmp.first.first;35 ti=tmp.first.second;36 if(i==n) ans=di;37 for(e=first[i];e;e=next[e])38 {39 j=v[e];40 if(ti>=t[e]) pq.push(make_pair(make_pair(di+d[e],ti-t[e]),j));41 }42 }43 printf("%d\n",ans);44 memset(first,0,sizeof(first));45 }46 return 0;47 }

 

转载于:https://www.cnblogs.com/algorithms/archive/2012/04/24/2467955.html

你可能感兴趣的文章
php中的isset和empty的用法区别
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
正则表达式
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
加固linux
查看>>
WPF中Image显示本地图片
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
[poj1006]Biorhythms
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
Hover功能
查看>>
js千分位处理
查看>>
Mac---------三指拖移
查看>>
字符串类型的相互转换
查看>>
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>