poj 1724 有限制的最短距离(优先队列+链表)
2011-08-24 09:27
267 查看
题目链接:http://poj.org/problem?id=1724
题目大意:给你一个最大费用,让你在费用容许的范围内(情况下)求有源点到终点的最短距离,也就是一般的单源最小距离,不同之处在于加了费用限制。用现有的求最短距离的的方法是不可能解的。我们都知道,求最短距离的实质就是贪心(到达同样的点是所花的费用或者距离最少)我们可以这样使用优先队列,让只要到达某个点所花的费用总和小于给定的费用的所有顶点都进队列,这样每次让距离最小的出队列,如果出队列的是终点则此时的最小距离就是最费用的范围内的最短距离。
近来做题一直困惑的不是 题不会做或者没思路而是以前不习惯用邻接表,一直没用过,而这几道题呢,最终发现这几道题WA都是有重边的而且重边不能舍弃(或取最小的)因为图是有向图且要求k短路或者有限制的最短路,这些都要考虑的。没办法决定试着写下没想到这么快一直超时的变成了0ms,看来以后.............
View Code
题目大意:给你一个最大费用,让你在费用容许的范围内(情况下)求有源点到终点的最短距离,也就是一般的单源最小距离,不同之处在于加了费用限制。用现有的求最短距离的的方法是不可能解的。我们都知道,求最短距离的实质就是贪心(到达同样的点是所花的费用或者距离最少)我们可以这样使用优先队列,让只要到达某个点所花的费用总和小于给定的费用的所有顶点都进队列,这样每次让距离最小的出队列,如果出队列的是终点则此时的最小距离就是最费用的范围内的最短距离。
近来做题一直困惑的不是 题不会做或者没思路而是以前不习惯用邻接表,一直没用过,而这几道题呢,最终发现这几道题WA都是有重边的而且重边不能舍弃(或取最小的)因为图是有向图且要求k短路或者有限制的最短路,这些都要考虑的。没办法决定试着写下没想到这么快一直超时的变成了0ms,看来以后.............
View Code
#include<iostream> #include<queue> #include<cstring> #include<cstdio> const int INF=10000; using namespace std; struct ss{ int v,len,value,next; }map[10005]; int head[105]; struct tt{ int x,y,z; friend bool operator <(tt s,tt t) { return s.x>t.x; } }; int n,m,v,sum; int Dijkstra() { int i,flag=0; tt p,q; priority_queue<tt>Q; p.x=0,p.y=0,p.z=1; Q.push(p); while (!Q.empty()) { p=Q.top(); Q.pop(); if(p.z==n){ sum=p.x; flag=1; break; } for (i=head[p.z];i;i=map[i].next) if(map[i].value+p.y<=v) { q.x=p.x+map[i].len; q.y=map[i].value+p.y; q.z=map[i].v; Q.push(q); } } if(flag)return 1; return 0; } int main() { int i,x,y,z,w,N; sum=0; N=1; scanf("%d%d%d",&v,&n,&m); for (i=1;i<=m;i++) { scanf("%d%d%d%d",&x,&y,&z,&w); if(x==y) continue; map .v=y; map .len=z; map .value=w; map .next=head[x]; head[x]=N++; } if(Dijkstra())printf("%d\n",sum); else printf("-1\n"); return 0; }
相关文章推荐
- poj 1724 ROADS条件限制下的最短路径
- POJ 1724 ROADS (有限制的最短路径DFS/BFS)
- poj 1724 ROADS条件限制下的最短路径
- poj 1724 ROADS条件限制下的最短路径
- poj 1724 ROADS条件限制下的最短路径
- poj 1724 ROADS条件限制下的最短路径
- poj 1724 ROADS条件限制下的最短路径
- poj 1724 ROADS条件限制下的最短路径
- POJ 1724 花销限制的最短路径
- poj 1724 ROADS条件限制下的最短路径
- POJ 3356 AGTC(最短编辑距离 DP)
- POJ1160 P个邮局N个村庄求最短总距离
- poj 1724 ROADS(dfs)||(优先队列+dijkstra)
- POJ 1125 Stockbroker Grapevine(floyd两点间最短距离)
- POJ1160 P个邮局N个村庄求最短总距离
- POJ 3356 AGTC 【最短编辑距离,经典DP】
- poj 3608(旋转卡壳求解两凸包之间的最短距离)
- poj 1724 ROADS(dfs)||(优先队列+dijkstra)
- poj 1724 有限制条件的最短路
- POJ 1724 有限制的最短路