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
 
  1. #include <cstdio>
  2. #include <map>
  3. #include <iostream>
  4. #include<cstring>
  5. #include<bits/stdc++.h>
  6. #define ll long long int
  7. #define M 6
  8. using namespace std;
  9. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  10. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  11. int moth[]={,,,,,,,,,,,,};
  12. int dir[][]={, ,, ,-, ,,-};
  13. int dirs[][]={, ,, ,-, ,,-, -,- ,-, ,,- ,,};
  14. const int inf=0x3f3f3f3f;
  15. const ll mod=1e9+;
  16. struct node{
  17. int next;
  18. int to;
  19. int d,p;
  20. };
  21. node edge[];
  22. int head[];
  23. int cnt;
  24. void add(int u,int v,int d,int p){
  25. edge[++cnt].next=head[u];
  26. edge[cnt].to=v;
  27. edge[cnt].d=d;
  28. edge[cnt].p=p;
  29. head[u]=cnt;
  30. }
  31. int n,m;
  32. int s,e;
  33. bool vis[];
  34. int dis[],cost[];
  35. void spfa(int x){
  36. for(int i=;i<=n;i++){
  37. dis[i]=inf;
  38. cost[i]=inf;
  39. }
  40. dis[x]=cost[x]=;
  41. memset(vis,,sizeof(vis));
  42. queue<int > q;
  43. q.push(x);
  44. vis[x]=;
  45. while(!q.empty()){
  46. int u=q.front();
  47. q.pop();
  48. vis[u]=;
  49. for(int i=head[u];i!=;i=edge[i].next){
  50. int to=edge[i].to; int d=edge[i].d; int p=edge[i].p;
  51. if(dis[to]>dis[u]+d||((dis[to]==dis[u]+d)&&(cost[to]>cost[u]+p))){
  52. cost[to]=cost[u]+p;
  53. dis[to]=dis[u]+d;
  54. if(!vis[to]){
  55. q.push(to);
  56. vis[to]=;
  57. }
  58. }
  59. }
  60. }
  61.  
  62. }
  63. int main(){
  64. //ios::sync_with_stdio(false);
  65. while(scanf("%d%d",&n,&m)!=EOF){
  66. if(!n&&!m) break;
  67. memset(head,,sizeof(head));
  68. cnt=;
  69. for(int i=;i<=m;i++){
  70. int a,b,d,p;
  71. scanf("%d%d%d%d",&a,&b,&d,&p);
  72. add(a,b,d,p);
  73. add(b,a,d,p);
  74. }
  75. scanf("%d%d",&s,&e);
  76. spfa(s);
  77. printf("%d %d\n",dis[e],cost[e]);
  78. }
  79. }

hdu 3790 最短路问题 (spfa练手)的更多相关文章

  1. Python练手之爬虫

    很久没更新博客了,最近自学Python,写个在百度上爬算法题题解的爬虫,第一次写爬虫..纯当练手 慢慢来.. #coding:utf-8 ''' Created on 2016年11月22日 @aut ...

  2. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  3. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

  4. web前端学习部落22群分享给需要前端练手项目

    前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...

  5. webpack练手项目之easySlide(三):commonChunks(转)

    Hello,大家好. 在之前两篇文章中: webpack练手项目之easySlide(一):初探webpack webpack练手项目之easySlide(二):代码分割 与大家分享了webpack的 ...

  6. webpack练手项目之easySlide(二):代码分割(转)

    在上一篇 webpack练手项目之easySlide(一):初探webpack  中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack ...

  7. webpack练手项目之easySlide(一):初探webpack (转)

    最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力.     webpack是一个前端的打包管理工具,大家可以前往:http:/ ...

  8. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  9. JAVA大数类练手

    今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识.果断水了6道题......都是非常基础的.就当的练手的吧. 学到的只是一些大数类的基本操作.以后多做点这样的题,争取熟练运用水大数题... ...

随机推荐

  1. [转帖]Linux 的静态库与动态库

    Linux下的静态库与动态库 2017年02月18日 09:17:13 LLZK_ 阅读数:10257 标签: linux动态库静态库区别使用 更多 个人分类: Linux学习笔记 所属专栏: Lin ...

  2. Mybatis Dao层注解及XML组合Dao的开发方式

    mybatis可以用xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法.显然 ,后者更加简单. 实体类Student   package com.zhao. ...

  3. select、poll、epoll之间的区别(搜狗面试)

    (1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对 ...

  4. Python memecache

    memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,故常用来做数据库缓存.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...

  5. SpringBoot之显示本地图片范例

    controller // 扫描指定目录下的图片进行展示 @RequestMapping("/showPics") public ModelAndView showPics(Mod ...

  6. 四、K8S

    一.查看日志 journalctl -xeu kubelet

  7. java 处理上传exl数据 并导入数据库

    思路:处理上传exl表格,并读取文件,数据,讲数据放去集合,循环插入数据库. 重点,读取文件时需要读数据,格式和数据是否正确,(因为只是把整条路打通,所以这块没有细弄): 项目使用ssm框架, str ...

  8. Mvc校验用户没有登录就跳转的实现

    看字面意思很简单,就是判断用户是否登录了,如果没有登录就跳转到登陆页面. 没错,主要代码如下(这里就不写判断登录了,直接跳转) 首先在控制器中新建一个BaseController public cla ...

  9. java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer; at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.jav

    在整合spring和mybatis在执行数据库操作的时候报出了: java.lang.AbstractMethodError: org.mybatis.spring.transaction.Sprin ...

  10. .NET提供了三种后台输出js的方式:

    .NET提供了三种后台输出js的方式: 首先创建 js文件testjs.js {    Page.ClientScript.RegisterClientScriptInclude("keys ...