hdu 3790 最短路径问题
2012-03-21 14:39
483 查看
[align=left]Problem Description[/align]
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
[align=left]Input[/align]
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
[align=left]Output[/align]
输出 一行有两个数, 最短距离及其花费。
分析:每条路径增加 了一个权值,但还是一道最短路的问题,只需要在更新距离的时候判断一下相等的情况
SPFA版
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
[align=left]Input[/align]
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
[align=left]Output[/align]
输出 一行有两个数, 最短距离及其花费。
分析:每条路径增加 了一个权值,但还是一道最短路的问题,只需要在更新距离的时候判断一下相等的情况
SPFA版
#include<iostream> #include<algorithm> #include<queue> using namespace std; const int N = 1001; int g ,w ,n,m; int dist ,cost ; bool vis ; int Q[N*100]; void init() { for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) g[i][j]=w[i][j]=INT_MAX; } void SPFA(int s,int t) { for(int i=1;i<=n;i++) { dist[i]=INT_MAX; cost[i]=INT_MAX; } dist[s]=cost[s]=0; memset(vis,false,sizeof(vis)); vis[s]=true; int pri=1,end=2; Q[1]=s; while(pri<end) { int v=Q[pri]; for(int i=1;i<=n;i++) { if(g[v][i]==INT_MAX) continue; int newdis=dist[v]+g[v][i]; if(newdis<dist[i]) { dist[i]=newdis; cost[i]=cost[v]+w[v][i]; if(!vis[i]) { Q[end++]=i; vis[i]=true; } } else if(newdis==dist[i]&&cost[v]+w[v][i]<cost[i]) cost[i]=cost[v]+w[v][i]; } vis[v]=false; pri++; } } int main() { int a,b,c,d,s,t; while(scanf("%d %d",&n,&m)==2 && (n||m)) { init(); for(int i=0;i<m;i++) { scanf("%d %d %d %d",&a,&b,&c,&d); if(c<g[a][b]) { g[a][b]=g[b][a]=c; w[a][b]=w[b][a]=d; } } scanf("%d %d",&s,&t); SPFA(s,t); printf("%d %d\n",dist[t],cost[t]); } return 0; }
相关文章推荐
- HDU 3790 最短路径问题
- 最短路径问题 hdu 3790
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题(单源最短路)
- HDU-3790-最短路径问题
- HDU 3790 最短路径问题 (双重权值) dp
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题(dijkstra)
- HDU 3790 最短路径问题 -- from lanshui_Yang
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题
- hdu 3790 (最短路径问题dijkstra)
- hdu 3790 最短路径问题
- 最短路径问题 多加了一个费用 http://acm.hdu.edu.cn/showproblem.php?pid=3790
- 最短路径问题 HDU 3790
- HDU 3790 最短路径问题 (SPFA)
- HDU 3790-最短路径问题(双权最短路)
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题 双重权值