给你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

思路:最短路问题,Djikstra即可,注意读入可能有重复边,需要判断一下,代码如下:
const int maxm = ;
const int INF = 0x7fffffff; int N, M, Start, End, G[maxm][maxm], len[maxm][maxm], vis[maxm], cost[maxm], steps[maxm]; struct Node {
int u, sum, step;
Node(int _u, int _sum, int _step) : u(_u), sum(_sum), step(_step){} bool operator<(const Node &a) const {
return a.sum < sum || (a.sum == sum && a.step < step);
}
}; void init() {
for (int i = ; i <= N; ++i) {
cost[i] = steps[i] = INF;
for (int j = ; j <= N; ++j)
G[i][j] = G[j][i] = len[i][j] = len[j][i] = INF;
}
memset(vis, , sizeof(vis));
} int main() {
while(scanf("%d%d",&N,&M) && N + M) {
init();
for (int i = ; i < M; ++i) {
int t1, t2, t3, t4;
scanf("%d%d%d%d", &t1, &t2, &t3, &t4);
if(G[t1][t2] > t3 || (G[t1][t2] == t3 && len[t1][t2] > t4)) {
G[t1][t2] = G[t2][t1] = t3;
len[t1][t2] = len[t2][t1] = t4;
}
}
scanf("%d%d", &Start, &End);
priority_queue<Node> q;
q.push(Node(Start, , ));
cost[Start] = steps[Start] = ;
while(!q.empty()) {
Node p = q.top();
q.pop();
if(vis[p.u]++)
continue;
for (int i = ; i <= N; ++i) {
if(G[p.u][i] != INF) {
if(cost[i] > cost[p.u] + G[p.u][i] || (cost[i] == cost[p.u] + G[p.u][i]
&& steps[i] > steps[p.u] + len[p.u][i])) {
cost[i] = cost[p.u] + G[p.u][i];
steps[i] = steps[p.u] + len[p.u][i];
q.push(Node(i, cost[i], steps[i]));
}
}
}
}
printf("%d %d\n", cost[End], steps[End]);
}
return ;
}
												

Day4-B-最短路径问题 HDU3790的更多相关文章

  1. 最短路径问题 HDU3790 (dijkstra)

    基础的dijkstra问题  加上了花费 #include<bits/stdc++.h> using namespace std; ][][]; ];]; #define INF 9999 ...

  2. HDU-3790 最短路径问题

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

  3. hdu-3790最短路径问题

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

  4. HDU-3790最短路径问题,第十遍终于过了~

    最短路径问题                                                                   Time Limit: 2000/1000 MS (J ...

  5. 【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】

    题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. 只需要再更新的时候判断一下就好 voi ...

  6. hdu3790最短路径问题 (用优先队列实现的)

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

  7. hdu3790最短路径问题

    题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...

  8. 最短路径HDU3790(Dijkstra)

    准备考研,荒废了好多东西,希望做了正确的决定 /********************************************************* *author:chen xin * ...

  9. hdu-3790 最短路径问题(双重权值)

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

  10. HDU-3790 最短路径问题(双重权值)

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

随机推荐

  1. Linux 笔记:虚拟控制台

    登录后按Alt+F2键这时又可以看到"login:"提示符,这个就是第二个虚拟控制台. 一般新安装的Linux有四个虚拟控制台,可以用Alt+F1~Alt+F4来访问. 虚拟控制台 ...

  2. maven的背景

    本书链接 链接:http://pan.baidu.com/s/1c2fF3Ks 密码:hlce maven是一套软件工程管理和整合工具. 基于工程对象模型的概念(POM),通过一个中央信息管理模块,m ...

  3. event.clientX和event.clientY

    event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...

  4. JPA 级联保存的问题

    前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...

  5. 【PAT甲级】1045 Favorite Color Stripe (30 分)(DP)

    题意: 输入一个正整数N(<=200),代表颜色总数,接下来输入一个正整数M(<=200),代表喜爱的颜色数量,接着输入M个正整数表示喜爱颜色的编号(同一颜色不会出现两次),接下来输入一个 ...

  6. KEAZ128 时钟配置

    本文介绍如何用KEAZ128评估版(FRDM-KEAZ128Q80)配置为40MHz core freqency/20MHz bus frequency. 1.了解器件时钟特性 参见NXP KEA12 ...

  7. leetcode菜鸡斗智斗勇系列(6)--- 检查一个string里面有几个对称的字段

    1.原题: https://leetcode.com/problems/split-a-string-in-balanced-strings/ Split a String in Balanced S ...

  8. 企业行业分类数据库JSON

    这篇文章主要介绍了 企业信息中选择行业类型,常用在企业注册,入驻填写企业信息等. JSON: [{"id":1001,"name":"IT服务&quo ...

  9. VIM 练级

    https://coolshell.cn/articles/5426.html

  10. scrapy-redis分布式

    scrapy是python界出名的一个爬虫框架,提取结构性数据而编写的应用框架,可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 虽然scrapy 能做的事情很多,但是要做到大规模的分 ...