Day4-B-最短路径问题 HDU3790
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的更多相关文章
- 最短路径问题 HDU3790 (dijkstra)
基础的dijkstra问题 加上了花费 #include<bits/stdc++.h> using namespace std; ][][]; ];]; #define INF 9999 ...
- HDU-3790 最短路径问题
最短路径问题 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hdu-3790最短路径问题
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790最短路径问题,第十遍终于过了~
最短路径问题 Time Limit: 2000/1000 MS (J ...
- 【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】
题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. 只需要再更新的时候判断一下就好 voi ...
- hdu3790最短路径问题 (用优先队列实现的)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu3790最短路径问题
题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...
- 最短路径HDU3790(Dijkstra)
准备考研,荒废了好多东西,希望做了正确的决定 /********************************************************* *author:chen xin * ...
- hdu-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input ...
- HDU-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
随机推荐
- jdk基础提升
1. treeMap,treesSet 作用:1具有对应普通的Map,Set的功能,2.能排序Map和Set (依赖树的结构进行排序---中序循环) TreeSet<String> tr ...
- ANSYS单元应用简介1
目录 1. LINK单元 2. BEAM单元 3. PLANE单元 4. SHELL单元 5. SOLIDE单元 6. COMBIN单元 ANSYS中的单元针对不同的应用对象,有着不同的选择方法,下面 ...
- 【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)
题意: 输入三个正整数N,M,S(N<=100,M<N,S<=2^30)分别代表数的结点个数,非叶子结点个数和需要查询的值,接下来输入N个正整数(<1000)代表每个结点的权重 ...
- javascript 变量、常量 、 函数 声明
声明变量: 方式一: 使用 var 定义变量,可在定义的同时赋值 或 不赋值 . 方式二: 直接使用[变量名 = 值]的形式,这会定义一个全局变量,但在严格模式下会出现引用错误.[不建议使用] 方式三 ...
- Vue系列(六)之常用指令v-model
v-model 基本使用 修饰符 .trim .number .lazy 前面讲到的插值,其实都是单向绑定,数据变-->视图变.有些元素可以与用户交互,比如input,select等,那么我们希 ...
- HTML、HTML5重难点
一.XHTML与HTML的区别 文档结构 XHTML DOCTYPE 是强制性的 <html>中的 XML namespace 属性是强制性的 <html>.<head& ...
- Plastic Sprayer Supplier - Sprayer: How Can The Product Be Sprayed?
In many end products, especially in cosmetics, the first thing that appeals to consumers is the form ...
- java课后问题解答
1.当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机 答:当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位 置抛出,可能会导致不同的finall ...
- jquery $.ajax status为200 却调用了error方法
参考: https://blog.csdn.net/shuifa2008/article/details/41121269 https://blog.csdn.net/shuifa2008/artic ...
- ORACLE A表字段更改为B表的字段
UPDATE IM_PARA_CHECK_DATA_NEW A SET (OPERASTATE, COVER_TYPE, COVER_PRO, WORK_BAND, DEVICE_TYPE) =(SE ...