本文转载自: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. java-redis初探

    一.Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的 ...

  2. Python基础——字符串

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 在Python中,字符串也是一种数据类型.相比其它数据类型,字符串算是比较复杂的.为何呢?因为字符串不仅包含英文字母 ...

  3. 剑指offer第一天

    15.反转链表 输入一个链表,反转链表后,输出链表的所有元素. 解法一:(使用栈) /* public class ListNode { int val; ListNode next = null; ...

  4. C. Polycarp at the Radio

    这题题意不太好理解,但是可以通过样例推.主要考察思维的全面性,注意把b[m]特殊处理下. AC代码: #include<cstdio> #include<cstring> co ...

  5. poj2635 同余定理 + 素数筛法

    题意:给定一个数,这个数是两个素数的乘积,并给定一个限制L,问是否两个素数中存在小于L的数,若存在输出较小质数,否则打印'GOOD'. 思路: 1 . x = a * b, a和b都是素数,那么x只能 ...

  6. AES-256加密解密

    /// <summary> /// AES-256加密 /// </summary> /// <param name="toEncrypt">& ...

  7. 内置函数值 -- chr() ord() -- 字符和ascii的转换

    英文文档: chr(i) Return the string representing a character whose Unicode code point is the integer i. F ...

  8. ffmpeg tutorial01 再分析

    如下图

  9. HI3531串口测试程序(arm)

    #include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...

  10. FusionCharts封装-Value

    Data.java: /** * @Title:Data.java * @Package:com.fusionchart.model * @Description:FusionCharts 封装dat ...