poj 1724(有限制的最短路)
2013-07-24 21:07
381 查看
题目链接:http://poj.org/problem?id=1724
思路:
有限制的最短路,或者说是二维状态吧,在求最短路的时候记录一下花费即可。一开始用SPFA写的,900MS险过啊,然后改成Dijkstra+priority_queue,60MS,orz.
SPFA:
View Code
思路:
有限制的最短路,或者说是二维状态吧,在求最短路的时候记录一下花费即可。一开始用SPFA写的,900MS险过啊,然后改成Dijkstra+priority_queue,60MS,orz.
SPFA:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<vector> using namespace std; #define MAXN 104 #define inf 1<<30 typedef pair<int,int>Pair; struct Edge{ int v,w,c; Edge(int vv,int ww,int cc):v(vv),w(ww),c(cc){} }; struct Node{ int u,dd,cost; bool operator < (const Node &p) const { if(p.dd==dd)return p.cost<cost; return p.dd<dd; } }; vector<vector<Edge> >map; int k,n,m,MIN; bool Dijkstra() { priority_queue<Node>Q; Node p,q; p.u=1,p.dd=0,p.cost=0,MIN=inf; Q.push(p); while(!Q.empty()){ p=Q.top(); Q.pop(); int u=p.u,dd=p.dd,cost=p.cost; if(u==n){ MIN=dd;break; } for(int i=0;i<map[u].size();i++){ int v=map[u][i].v,w=map[u][i].w,c=map[u][i].c; if(cost+c<=k){ q.u=v;q.dd=dd+w;q.cost=cost+c; Q.push(q); } } } return MIN<inf; } int main() { int u,v,w,c; while(~scanf("%d%d%d",&k,&n,&m)){ map.clear();map.resize(n+2); while(m--){ scanf("%d%d%d%d",&u,&v,&w,&c); map[u].push_back(Edge(v,w,c)); } if(Dijkstra()){ printf("%d\n",MIN); }else puts("-1"); } return 0; }
View Code
相关文章推荐
- poj 1724 有限制条件的最短路
- POJ - 1724【有限制条件的最短路】+HDU- 3790【双重权值的最短路】
- poj 1724 ROADS 加限制的最短路
- POJ 1724 最短路费用限制
- poj_1724 ROADS(有费用限制的最短路)
- poj 1724 有限制条件的最短路
- POJ 1724 有限制的最短路
- POJ 1724 - ROADS 有限制的最短路,A*
- poj 1724(有限制的最短路)
- Poj 1724 ROADS【二维限制最短路+SPFA】
- POJ 1724 优先队列解带限制最短路
- POJ 1724 ROADS (有限制的最短路)
- POJ 1724 最短路费用限制
- 【POJ 1724】Roads (限制最短路)
- POJ 1724 二维费用最短路
- POJ 1192 限制条件最短路
- POJ1724 价格合适的最短路(广搜BFS)
- POJ 1724 ROADS (优先队列+最短路)
- 【poj 1724】 ROADS 最短路(dijkstra+优先队列)
- POJ-1062 昂贵的聘礼 有限制的最短路