本文转载自:http://www.javaxxz.com/thread-359442-1-1.html

Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he can reach other cities from the capital as fast as possible. Thus, he proposed the highway project.
The Marjar Empire has N cities (including the capital), indexed from 0 to N - 1 (the capital is 0) and there are M highways can be built. Building the i-th highway costs C[sub]i[/sub] dollars. It takes D[sub]i[/sub] minutes to travel between city X[sub]i[/sub] and Y[sub]i[/sub] on the i-th highway.
Edward wants to find a construction plan with minimal total time needed to reach other cities from the capital, i.e. the sum of minimal time needed to travel from the capital to city i (1 ≤ i ≤ N). Among all feasible plans, Edward wants to select the plan with minimal cost. Please help him to finish this task.Input
There are multiple test cases. The first line of input contains an integer Tindicating the number of test cases. For each test case:
The first contains two integers N, M (1 ≤ N, M ≤ 10[sup]5[/sup]).
Then followed by&nbsp;M&nbsp;lines, each line contains four integers&nbsp;X[sub]i[/sub],&nbsp;Y[sub]i[/sub],&nbsp;D[sub]i[/sub],&nbsp;C[sub]i[/sub]&nbsp;(0 ≤&nbsp;X[sub]i[/sub],&nbsp;Y[sub]i[/sub]&nbsp;<&nbsp;N, 0 <&nbsp;D[sub]i[/sub],&nbsp;C[sub]i[/sub]&nbsp;< 10[sup]5[/sup]).<h4< dd="">Output
For each test case, output two integers indicating the minimal total time and the minimal cost for the highway project when the total time is minimized.<h4< dd="">Sample Input

  1. 2
  2. 4 5
  3. 0 3 1 1
  4. 0 1 1 1
  5. 0 2 10 10
  6. 2 1 1 1
  7. 2 3 1 2
  8. 4 5
  9. 0 3 1 1
  10. 0 1 1 1
  11. 0 2 10 10
  12. 2 1 2 1
  13. 2 3 1 2

复制代码

<h4< dd="">Sample Output

  1. 4 34 4

复制代码

题意:给一个图,每条边有个距离和花费,要求创建一个子图,满足0点到其余点的距离总和最小,且边的总花费最小。
思路:条件一,每个点贪心的都选最短路就是最优解,条件二,类似最小生成树的kruskal算法,在条件一的基础上更改下松弛条件即可。
拓展:CF545E,求距离总和最小,且总的边的长度最小,其实那题也是类似最短路基础上跑最小生成树。

  1. # include <iostream># include <cstdio># include <cstring># include <queue>using namespace std;const int maxn = 2e5+30;long long dis[maxn], cost[maxn], x, y;int vis[maxn], Next[maxn], cnt;struct node{int u, v, w, c, next;}edge[maxn];queue<int>q;int scan(){    int res=0,ch,flag=0;    if((ch=getchar())=="-")        flag=1;    else if(ch>="0"&&ch<="9")        res=ch-"0";    while((ch=getchar())>="0"&&ch<="9")        res=res*10+ch-"0";    return flag?-res:res;}void out(long long x){    if(x/10) out(x/10);    putchar("0"+x%10);}void add(int u, int v, int w, int c){    edge[cnt] = {u, v,w,c,Next[u]};;    Next[u] = cnt++;    edge[cnt] = {v, u,w,c,Next[v]};    Next[v] = cnt++;}void spfa(){    memset(dis, 0x3f, sizeof(dis));    memset(cost, 0x3f, sizeof(cost));    memset(vis, 0, sizeof(vis));    while(!q.empty()) q.pop();    q.push(1);    dis[1] = cost[1] = 0;    while(!q.empty())    {        int u = q.front();        q.pop();        vis[u] = 0;        for(int i=Next[u]; ~i; i=edge[i].next)        {            int v=edge[i].v, w=edge[i].w, c=edge[i].c;            if(dis[v] > dis[u]+w)            {                dis[v] = dis[u]+w;                cost[v] = c;                if(!vis[v])                {                    vis[v] = 1;                    q.push(v);                }            }            else if(dis[v] == dis[u]+w)            {                if(cost[v] > c)                {                    cost[v] = c;                    if(!vis[v])                    {                        vis[v] = 1;                        q.push(v);                    }                }            }        }    }}int main(){    int t, n, m, u, v, w, c;    t=scan();    while(t--)    {        x = y = cnt = 0;        memset(Next, -1, sizeof(Next));        n=scan();m=scan();        for(int i=1; i<=m; ++i)        {            u=scan();v=scan();w=scan();c=scan();            add(u+1,v+1,w,c);        }        spfa();        for(int i=2; i<=n; ++i)        {            x += dis[i];            y += cost[i];        }        out(x);        putchar(" ");        out(y);        puts("");    }    return 0;}

复制代码

ZOJ3946:Highway Project(最短路变形)的更多相关文章

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

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

  2. ZOJ - 3946-Highway Project(最短路变形+优先队列优化)

    Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he can ...

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

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

  4. ZOJ 3946 Highway Project (最短路)

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

  5. POJ-1797Heavy Transportation,最短路变形,用dijkstra稍加修改就可以了;

    Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K          Description Background  Hugo ...

  6. POJ-2253.Frogger.(求每条路径中最大值的最小值,最短路变形)

    做到了这个题,感觉网上的博客是真的水,只有kuangbin大神一句话就点醒了我,所以我写这篇博客是为了让最短路的入门者尽快脱坑...... 本题思路:本题是最短路的变形,要求出最短路中的最大跳跃距离, ...

  7. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  8. POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 Description After going through the receipts from your car trip ...

  9. (spfa) Highway Project (zoj 3946 )

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

随机推荐

  1. scp的简单记忆方法

    scp虽然只有把文见发送到远端和从远端copy文件俩功能,但是常常把俩功能的先写什么给计混了,所以我就用通俗的大白话给总结了下,十分容易记忆,这里给大家分享一下.scp 我们常用的两个功能: (1)把 ...

  2. 构造N位格雷码(递归,面向对象)

    问题:递归打印出N位格雷码(相邻两个编码只有一位数字不同): 问题化归为:现有前N位的格雷码,如何构造N+1位的格雷码? 解决方法:采用递归构造格雷码集和. 递归出口:n = 1; 此时格雷码{0,1 ...

  3. UVA-11882 bfs + dfs + 剪枝

    假设当前已经到达(x,y),用bfs判断一下还可以到达的点有maxd个,如果maxd加上当前已经经过的长度小于当前答案的长度就退出,如果相同,就将bfs搜索到的点从大到小排序,如果连最大序列都无法大于 ...

  4. (转载)SVM-基础(三)

    支持向量机: Kernel  by pluskid, on 2010-09-11, in Machine Learning     70 comments 本文是"支持向量机系列" ...

  5. Jetty添加Filter过滤器

    1.Jetty嵌入到Spring项目 try { Server server = new Server(8080); WebAppContext context = new WebAppContext ...

  6. 转 Caffe学习系列(4):激活层(Activiation Layers)及参数

    在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...

  7. 腾讯云+校园扶持计划是bug还是福利

    前言   上午突然收到好友的微信消息.打开一看是关于关腾讯云"云+校园扶持计划".仔细看下了意思就是用户可以花360大洋购买腾讯云服务器配置为1核2G,1M带宽的服务器3年.(腾讯 ...

  8. C语言中的sizeof函数总结

    sizeof函数的结果: 变量:变量所占的字节数. ; printf( 数组:数组所占的字节数. ,,,,}; ] = {,,,,}; printf("size_arr1=%d\n" ...

  9. 沉淀,再出发——手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群

    手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群 一.准备,再出发 在项目启动之前,让我们看一下前面所做的工作.首先我们掌握了一些Linux的基本命令和重要的文件,其次我们学会 ...

  10. u盘安装ubuntu10.04 、11.04 server

    10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...