HDU 3790 最短路径问题【Dijkstra】
题意:给出n个点,m条边,每条边的长度d和花费p,给出起点和终点的最短距离和花费,求最短距离,如果有多个最短距离,输出花费最少的
在用dijkstra求最短距离的时候,再用一个f[]数组保存下最少花费就可以了
这道题wa了好多次
因为 建立图的时候没有考虑到重边,
还有在建图的时候,如果遇到w[a][b]相等的情况,就应该将其对应的花费更新成更小的了
还有
在写dijkstra函数的时候,把终点带进去当做了点的个数 这样不对 因为假如给出的起点,终点分别是st,en
那么如果只计算到en点的话,如果从st到en+1,en+1到en有更优的话,这样就错了
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int maxn=;
int w1[maxn][maxn],w2[maxn][maxn],f[maxn],d[maxn],used[maxn];
int w[maxn][maxn]; void dijkstra(int st,int en){
memset(used,,sizeof(used));
for(int i=;i<=en;i++) d[i]=INF;
d[st]=; for(int i=;i<=en;i++) f[i]=INF;
f[st]=; for(int k=;k<=en;k++){
int p,m=INF;
for(int i=;i<=en;i++) if(!used[i]&&d[i]<m) m=d[p=i];
used[p]=;
for(int i=;i<=en;i++) {
if(d[i]>d[p]+w1[p][i]||(d[i]==d[p]+w1[p][i]&&f[i]>f[p]+w2[p][i])){
d[i]=d[p]+w1[p][i];
f[i]=f[p]+w2[p][i];
}
}
}
} int main(){
int a,b,c,e;
int n,m;
int st,en;
while(scanf("%d %d",&n,&m)!=EOF&&n&&m){
memset(w1,0x3f,sizeof(w1));
memset(w2,0x3f,sizeof(w2)); for(int i=;i<=m;i++){
scanf("%d %d %d %d",&a,&b,&c,&e);
if(w1[a][b] > c)
{
w1[a][b] = w1[b][a] = c;
w2[a][b] = w2[b][a] = e;
}
else if(w1[a][b] == c)
w2[a][b] = w2[b][a] = min(w2[a][b],e);
}
scanf("%d %d",&st,&en);
dijkstra(st,n);
printf("%d %d\n",d[en],f[en]);
}
return ;
}
HDU 3790 最短路径问题【Dijkstra】的更多相关文章
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU - 3790 最短路径问题 (dijkstra算法)
HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
- #HDU 3790 最短路径问题 【Dijkstra入门题】
题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 3790 最短路径dijkstra(多重权值)
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 3790 最短路径问题(SPFA || Dijkstra )
题目链接 题意 : 中文题不详述. 思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次. #include < ...
- hdu 3790 最短路径问题(两个限制条件的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...
- HDU 3790 最短路径问题 (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...
随机推荐
- yum install 与 yum groupinstall 的区别
原文:http://blog.51yip.com/linux/1171.html yum 提供二种安装软件的方式 1,yum install 它安装单个软件,以及这个软件的依赖关系 2,yum gro ...
- 设计模式之Builder模式
一.感性认识 二.Builder模式 1.定义 一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.即构建过程相同,但是子部件却不相同. 2.结构说明 Builder: 创建者接口 ...
- POJ 1995
#include <iostream> using namespace std; long long power(long long a, long long b, long long m ...
- Android中的Adapter总结
一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for t ...
- Android线程消息通信(二)
创建线程消息队列 Android应用程序的消息队列是使用一个MessageQueue对象来描述的,它可以通过调用Looper类的静态成员函数prepareMainLooper或者prepare来创建, ...
- JS面向(基于)对象编程--构造方法(函数)
构造函数(方法)介绍 什么是构造函数呢?在回答这个问题之前,我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接 ...
- eclipse创建python项目
http://jingyan.baidu.com/article/19192ad8173300e53f570757.html
- 关于WII光枪定位的设计(转)
方法1. 简单1 LED方法 这是一个很忽悠的方法,把LED看成是屏幕中心,把光枪摄像头的视野范围看作是屏幕范围. 假设WII枪头摄像头的数据范围为[0,1024]*[0,768],显示器屏幕分辨率为 ...
- iOS开发--3D Touch的基本使用
1.桌面快捷菜单项 效果如图: 桌面快捷菜单 点击之后的效果如图: 点击桌面快捷菜单的效果 接下来看下具体实现:1).在-application:didFinishLaunchingWithOptio ...
- Java-斐波那契数
1.目标:使用非递归求斐波那契,0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 2.思路:观察规律得:从第3个数起,把和从为下一个数的加数,把加数作为下一个数的被加数,即三个 ...