题目链接:

http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3946

题解:

用dijkstra跑单元最短路径,如果对于顶点v,存在一系列边(ui,v)使得dis[v]最小(dis[v]表示0到v的距离)。这些边能且只能选一条,那么我们自然应该选cost最小的那个边了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std; typedef long long LL;
const int maxn = 1e5 + ; struct Edge {
int ne, u, v, c, d;
Edge(int ne, int u, int v, int d, int c) :ne(ne), u(u), v(v), d(d), c(c) {}
Edge() {}
}egs[maxn * ]; struct Heap {
int u, d, c;
Heap(int u, int d) :u(u), d(d) {}
Heap() {}
bool operator < (const Heap& tmp) const {
return d>tmp.d;
}
}; struct Node {
int u, v, w;
bool operator < (const Node& tmp) const {
return w<tmp.w;
}
}nds[maxn]; int head[maxn], tot; void addEdge(int u, int v, int d, int c) {
egs[tot] = Edge(head[u], u, v, d, c);
head[u] = tot++;
} int n, m;
LL ans_d, ans_c; LL dis[maxn];
//pre[u]记录u和前驱节点的那条边的cost
int pre[maxn];
bool done[maxn]; void dij() {
for (int i = ; i<n; i++) {
dis[i] = 2e10;
}
memset(done, false, sizeof(done));
priority_queue<Heap> pq;
dis[] = ;
pq.push(Heap(, ));
while (!pq.empty()) {
Heap x = pq.top(); pq.pop();
int u = x.u;
if (done[u]) continue;
done[u] = true;
int p = head[u];
while (p != -) {
Edge &e = egs[p];
if (dis[e.v]>dis[u] + e.d) {
dis[e.v] = dis[u] + e.d;
pre[e.v] = e.c;
pq.push(Heap(e.v, dis[e.v]));
}
else if (dis[e.v] == dis[u] + e.d) {
//这里贪心选cost最小的边
if (pre[e.v]>e.c)
pre[e.v] = e.c;
}
p = e.ne;
}
}
ans_d = ; ans_c = ;
for (int i = ; i<n; i++) {
ans_d += dis[i];
}
for (int i = ; i<n; i++) {
ans_c += pre[i];
}
} void init() {
memset(head, -, sizeof(head));
memset(pre, -, sizeof(pre));
tot = ;
} int main() {
// freopen("data_in.txt","r",stdin);
int tc;
scanf("%d", &tc);
while (tc--) {
scanf("%d%d", &n, &m);
init();
for (int i = ; i<m; i++) {
int u, v, d, c;
scanf("%d%d%d%d", &u, &v, &d, &c);
addEdge(u, v, d, c);
addEdge(v, u, d, c);
}
dij();
printf("%lld %lld\n", ans_d, ans_c);
}
return ;
}

ZOJ 3946 Highway Project 贪心+最短路的更多相关文章

  1. ZOJ 3946.Highway Project(The 13th Zhejiang Provincial Collegiate Programming Contest.K) SPFA

    ZOJ Problem Set - 3946 Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the ...

  2. zoj 3946 Highway Project(最短路 + 优先队列)

    Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the emperor of the Marjar ...

  3. ZOJ 3946 Highway Project(Dijkstra)

    Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the emperor of the Marjar ...

  4. ZOJ 3946 Highway Project (最短路)

    题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费. 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费. 代码如 ...

  5. ZOJ 3946 Highway Project

    1.迪杰斯特拉最小堆 #include<cstdio> #include<cstring> #include<cmath> #include<map> ...

  6. ZOJ3946:Highway Project(最短路变形)

    本文转载自:http://www.javaxxz.com/thread-359442-1-1.html Edward, the emperor of the Marjar Empire, wants ...

  7. ZOJ-3946 Highway Project (最短路)

    题目大意:一张带权无向图,权有两个参数(d,c),分别表示走过这条边的时间和建造这条边的代价.要求选出一些边,使得0节点到其他点的距离之和最短,并在最短的基础上求最小代价. 题目分析:这是16年浙江省 ...

  8. (spfa) Highway Project (zoj 3946 )

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718   Highway Project Time Limit: 2 Seco ...

  9. hdu1874 畅通project续 最短路 floyd或dijkstra或spfa

    Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...

随机推荐

  1. 我们比较常见的PHP实现openSug.js参数调试

    这是一款利PHP对百度搜索下拉框提示免费代码实现参数配置调试的程序源代码. 由想要对网站进行搜索下拉调试的站长朋友们进行方便.快速的效果演示,具体参考下面的PHP代码. 如何使用? 请新建一份PHP文 ...

  2. [上架] iOS 上架更新版本号建议

    iOS 上架一個新版本号,就改个版号数字就好,有什么好说的? 是啊~ 如果上架顺利的话,就没什么好说的,如果被退件,再上传更新时,那版号怎么改? 下面说说我的做法(这只是建议,版号随自己喜好,没有固定 ...

  3. sqoop import/export使用经验

    一.先创建一个小表(test_01)进行测试(主节点IP:169.254.109.130/oracle服务器IP:169.254.109.100) 1.测试连接oracle; sqoop list-t ...

  4. ruby rspec+jenkins+ci_report持续集成生成junit测试报告

    1.加载ci_report gem install ci_reporter_rspec 2.给测试工程编写rakefile require 'ci/reporter/rake/rspec' requi ...

  5. 随机队列 ADT接口 数组实现

    Random queue ADT接口 RANDOM.h #include <stdlib.h> #include "Item.h" #include <time. ...

  6. 记账APP(5)

    今天做了成品,也在抖音上发了视频 目前会的只是一点点都算不上,离入门还远,所以,加油吧,小子

  7. # 20155224 实验五 Java网络编程及安全

    20155224 实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验要求 没有Linux基础的同学建议先学习<Li ...

  8. 2016-2017-2 20155227实验三《敏捷开发与XP实践》实验报告

    2016-2017-2 20155227实验三<敏捷开发与XP实践>实验报告 实验内容 一.实验内容 XP基础 XP核心实践 相关工具 二.实验过程 (一)敏捷开发与XP 1.XP是以开发 ...

  9. 【LG3723】[AHOI2017/HNOI2017]礼物

    [LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...

  10. MySQLdb in Python: “Can't connect to MySQL server on 'localhost'”

    因为我使用的是win64,所以在此系统下,需要设置为 127.0.0.1 #coding=utf-8 import MySQLdb if __name__ == '__main__': # 打开数据库 ...