题意:

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

#include<bits/stdc++.h>
using namespace std;
const int maxN = 1e4 + ;
const int maxM = + ;
const int inf = 1e9 + ;
int n, m, ecnt;
int head[maxN];
struct{
int to, d, c, nxt;
}edge[ * maxM];
void init(){
memset(head, -, sizeof(head));
ecnt = ;
}
void addEdge(int u, int v, int d, int c){
edge[ecnt].to = v;
edge[ecnt].d = d;
edge[ecnt].c = c;
edge[ecnt].nxt = head[u];
head[u] = ecnt++;
}
int dist[maxN], cost[maxN], vis[maxN];
void spfa(int S, int E){
fill(dist, dist + maxN , inf);
fill(cost, cost + maxN, inf);
memset(vis, , sizeof(vis));
queue<int> q;
q.push(S);
dist[S] = ;
cost[S] = ;
vis[S] = ; while(!q.empty()){
int u = q.front();
for(int i = head[u]; i != -; i = edge[i].nxt){
int v = edge[i].to, d = edge[i].d, c = edge[i].c;
if(dist[u] + d < dist[v]){ //路径短的话直接更新
dist[v] = dist[u] + d;
cost[v] = cost[u] + c;
q.push(v);
if(!vis[v]){
vis[v] = ;
q.push(v);
}
}else if(dist[u] + d == dist[v]){ //路径相等的话更新cost的最小值
cost[v] = min(cost[v] , cost[u] + c);
}
}
vis[u] = ;
q.pop();
}
cout << dist[E] << " " << cost[E] << "\n";
}
int main(){
// freopen("1.txt","r", stdin);
ios::sync_with_stdio(false);
while(cin >> n >> m){
if(n == ) break;
init();
for(int i = ; i < m; i++){
int u, v, d, c;
cin >> u >> v >> d >> c;
addEdge(u,v,d,c);
addEdge(v,u,d,c);
}
int S, E;
cin >> S >> E;
spfa(S, E); }
}

HDU 3790 (最短路 + 花费)的更多相关文章

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

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

  2. hdu 5521 最短路

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. HDU - 3790 最短路径问题 (dijkstra算法)

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

  4. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  5. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. HDU - 2544最短路 (dijkstra算法)

    HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...

  7. HDU 3790最短路径问题 [最短路最小花费]

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

  8. HDU(3790),最短路二级标准

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

  9. hdu 3790 最短路径问题(两个限制条件的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

随机推荐

  1. Flask (三) 数据迁移

    数据迁移 安装 pip install flask-migrate 初始化 使用app和db进行migrate对象初始化   from flask_migrate import Migrate mig ...

  2. [coci2015-2016 coii] Palinilap【字符串 哈希】

    传送门:http://www.hsin.hr/coci/archive/2015_2016/ 进去之后点底下的那个.顺带说一句,题目既不是一个英文单词,也不是克罗地亚单词,估计只是从回文串的英文单词p ...

  3. Codeforces Round #390 (Div. 2) D

    All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...

  4. 2016级萌新选拔赛BE题

    #include<bits/stdc++.h> using namespace std; #define ll long long ll a[]; ll d[]; int main() { ...

  5. memcpy/memmove?快速乘?

    memcpy?memmove? //#pragma GCC optimize(2) #include<bits/stdc++.h> using namespace std; ; ],b[n ...

  6. sgu316Kalevich Strikes Back(线段树+扫描线)

    做法:总体想法是求出一个矩形的面积以及它所包含的矩形,然后用自己的面积减掉所包含的.主要问题是怎样求解它所包含的矩形. 因为是没有相交点的,可以利用扫描线的方法去做,类似染色,当前段如果是x色,也就是 ...

  7. #82. 【UR #7】水题生成器

    链接:http://uoj.ac/problem/82 今天是世界水日,著名的水题资源专家蝈蝈大臣向世界宣布了他的一项新发明 —— 水题生成器. 每道题目都有一个正整数的难度值.水题生成器虽然强大但是 ...

  8. go查询mysql到list<map>

    func selects() { db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?cha ...

  9. 由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案。

    由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案. 动态在页面上添加了5个按钮,实现的功能应该是点击对应按钮在控制台输出相应的索引.但因为应该 ...

  10. andorid 向上滑动控制标题栏显示

    要实现这样的功能,原理不难,监听滑动距离再设置标题栏的透明度 下面是监听一个带头view的list实现核心代码: mbar是标题栏 mListView.setOnScrollListener(new ...