最短路径问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 33536    Accepted Submission(s): 9835

Problem Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
Input
输入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)
Output
输出 一行有两个数, 最短距离及其花费。
Sample Input
3 2
1 2 5 6
2 3 4 5
1 3
0 0

Sample Output
9 11
分析:水题。用spfa,当两条路相等的时候选择花费最少的路即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define INF 999999999
using namespace std;
struct Node{int s,t,c,q;
}edge[200000];
int N,M;
int next1[200000],head[2000];
int d[2000],vis[2000],cost[2000];
int S,T,cnt;void spfa()
{for(int i=0;i<=N;i++){vis[i]=0;d[i]=INF;cost[i]=INF;}vis[S]=1;d[S]=0;cost[S]=0;queue<int> q;q.push(S);while(!q.empty()){int v=q.front();q.pop();vis[v]=0;int k=head[v];while(k!=-1){int b=edge[k].t;if(d[b]>d[v]+edge[k].c){cost[b]=cost[v]+edge[k].q;d[b]=d[v]+edge[k].c;if(!vis[b]){vis[b]=1;q.push(b);}}else if(d[b]==d[v]+edge[k].c&&cost[b]>cost[v]+edge[k].q){cost[b]=cost[v]+edge[k].q;if(!vis[b]){vis[b]=1;q.push(b);}}k=next1[k];}}}void Add(int a,int b,int c,int q)
{edge[cnt].s=a;edge[cnt].t=b;edge[cnt].c=c;edge[cnt].q=q;next1[cnt]=head[edge[cnt].s];head[edge[cnt].s]=cnt;cnt++;
}int main()
{while(scanf("%d%d",&N,&M)!=-1){if(!N&&!M) break;memset(head,-1,sizeof(head));cnt=1;for(int i=1;i<=M;i++){int a,b,c,q;scanf("%d%d%d%d",&a,&b,&c,&q);Add(a,b,c,q);Add(b,a,c,q);}scanf("%d%d",&S,&T);spfa();printf("%d %d\n",d[T],cost[T]);}return 0;
}

View Code

转载于:https://www.cnblogs.com/ACRykl/p/9103805.html

hdu3790 最短路径问题(spfa)相关推荐

  1. HDU3790 最短路径问题【Dijkstra算法】

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. 最短路径算法——SPFA算法

    在家的这几天效率还是蛮低的,总是有其他的事情耽搁,然后最近就在做搜索题,然后做了两个搜索关于最短路径的,点数少的时候之前学的佛洛依德还能派上点用处,可以点数过1000之后就容易超时了,然后看他们的题解 ...

  3. ssl2661-廉价最短路径【SPFA】

    前言 这是一篇迟到的博客 题目 找一条最廉价的最短路径 输入输出(建议无视) Input 输入文件第一行有两个整数m和n,用一个空格隔开,其中,m是顶点数,而n是边数.接下来的n行给出所有的边及其价值 ...

  4. 单源最短路径(spfa,Dijkstra, bellman-ford)

    目录 Dijkstra 原理:基于贪心. 为什么 Dijkstra 不能处理有负边的情况 Bellman-ford 原理:动态规划, 实质见floyd的另一篇博客 1,能找负环, 2,有变数限制的最短 ...

  5. hdu 3790(最短路径问题 SPFA算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    ...

  6. hdu-3790最短路径问题

    Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input ...

  7. 最短路径(SPFA算法)

    1200: 小明的难题 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 363 Solved: 103 [Submit][Status][Web Boar ...

  8. 最短路径之Spfa算法

    题目:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=208 #include <iostream> #incl ...

  9. hdu3790最短路径问题(迪杰斯特拉算法+详解+代码)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

最新文章

  1. 简析 .NET Core 构成体系
  2. 清华大学范玉顺互联网与大数据_清华大学范玉顺:大数据、人工智能与工业互联网...
  3. button,submit, image的区别 点onclick后隐藏行
  4. CMake Error: CMake was unable to find a build program corresponding to Ninja.
  5. Transition 实现轮播图
  6. quartz分布式集群部署并且可视化配置job定时任务
  7. ICCV 2017《Unsupervised Laerning of Important Objects from First-Person Videos》论文笔记
  8. 组装台式电脑配置清单_攒机必备!各种价位的台式电脑配置清单!
  9. 韩顺平 servlet 笔记 第4讲
  10. 买断式软件逐渐向订阅式软件发展,是不是资本想一直割韭菜?
  11. mysql sql语句集合
  12. 【机器人学】机器人运动学基础
  13. 吉米多维奇数学分析习题集每日一题--泰勒公式习题1377
  14. Android微信搜索,微信搜索APP
  15. jQuery下载和安装详细教程
  16. ios 故事板跳转
  17. python将多张图片合并成一张
  18. win10密码忘了怎么办_笔记本密码忘了怎么办
  19. 30分钟完成pandas入门
  20. C语言学习笔记——typedef

热门文章

  1. CSS中关于margin的理解误区
  2. KlayGE 4.2开发计划
  3. 字体在ppt中可以整体替换吗_干货,做PPT时这样选择字体,瞬间提升幻灯片档次,看完你就懂了...
  4. Python入门之编程与编程语言
  5. 单片机有什么好的网课?
  6. STM32单片机真的落后?
  7. exgcd ---- 2020牛客多校第三场:[Fraction Construction Problem:exgcd+思维题]
  8. 列表推导式 python原理_Python进阶-列表推导式详解总结
  9. python 多线程和协程结合_一文讲透 “进程、线程、协程”
  10. php各种api接口,PHPSAPI接口