ZOJ 3946 Highway Project 贪心+最短路
题目链接:
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 贪心+最短路的更多相关文章
- 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 ...
- zoj 3946 Highway Project(最短路 + 优先队列)
Highway Project Time Limit: 2 Seconds Memory Limit: 65536 KB Edward, the emperor of the Marjar ...
- ZOJ 3946 Highway Project(Dijkstra)
Highway Project Time Limit: 2 Seconds Memory Limit: 65536 KB Edward, the emperor of the Marjar ...
- ZOJ 3946 Highway Project (最短路)
题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费. 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费. 代码如 ...
- ZOJ 3946 Highway Project
1.迪杰斯特拉最小堆 #include<cstdio> #include<cstring> #include<cmath> #include<map> ...
- ZOJ3946:Highway Project(最短路变形)
本文转载自:http://www.javaxxz.com/thread-359442-1-1.html Edward, the emperor of the Marjar Empire, wants ...
- ZOJ-3946 Highway Project (最短路)
题目大意:一张带权无向图,权有两个参数(d,c),分别表示走过这条边的时间和建造这条边的代价.要求选出一些边,使得0节点到其他点的距离之和最短,并在最短的基础上求最小代价. 题目分析:这是16年浙江省 ...
- (spfa) Highway Project (zoj 3946 )
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718 Highway Project Time Limit: 2 Seco ...
- hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...
随机推荐
- Linux命令—tar
day 7:tar压缩.解压缩.打包.解包命令 区分打包和压缩:打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什么要区分这两个概念呢?这源于Li ...
- 工作和面试中的gdb
gdb是C/C++程序员必备的专业技能,工作中gdb最常用的场景有两个,一个是分析core文件,另一个是调试程序. 分析core文件的方法如下: 1.gdb 程序名 core文件名 2.bt或wher ...
- sqlserver之group by 与over函数
group by 函数主要用来对数据进行分组,over()函数则是一个“开窗函数”,它更多的是与聚合函数如:sum().max().min().avg().count()等函数以及排名函数如:row_ ...
- flex datagrid checkbox选中项目
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:fx=" ...
- 20155317 2016-2017-2《Java程序设计》课程总结
20155317 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 新玮的首发博客:对师生关系的期望. C语言与java 20155317 王新玮第二次:语言掌握调查 ...
- 20155323 2016-2017-2 《Java程序设计》第9周学习总结
20155323 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操 ...
- yaml中的锚点和引用
项目引入yaml语言来写配置文件,最近发现利用其锚点&和引用*的功能,可以极大减少配置文件中的重复内容,将相同配置内容收敛到锚点处,修改时,只需要修改锚点处的内容,即可在所有引用处生效. ya ...
- day 2 异常传递 ,抛出
1.异常的传递 def test1(): print("---test1--") print(num) print('---test1 over---') def test2(): ...
- 【LOJ4632】[PKUSC2018]真实排名
[LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...
- JUnit在intellij idea中只能在test里面才能使用,否则不能添加import
只能在 src下的test下使用 不能再main下使用 否则不能import到指定的junit包 idea这样做的好处就是分离主项目和测试项目,这样一来就能够更加方便的测试了 如图直接这样把整个主包 ...