• P1629 邮递员送信


    P1629 邮递员送信:

    题目描述:

     输入格式:

    输出格式:

     输入输出样例:

    输入 #1

    5 10
    2 3 5
    1 5 5
    3 5 6
    1 2 8
    1 3 8
    5 3 4
    4 1 8
    4 5 3
    3 5 6
    5 4 2

    输出 #1

    83

    说明/提示:

     分析:

    因为一次送一个邮件,所以送完一个要回到邮局也就是1号节点,所以这就成了个单源多终点最短路+多源单终点的问题,其实那解决的就是多源单终点的问题,我们把它转换同样的单源多终点的问题,这么转,就是再见一个反向图,也就是把路的所有的方向倒过来建图,在求两个图的单源多终点最短路,那么就有很多方法,Dijkstra,Spfa,Ford,Floyd,呵呵,我第一次就是用Floyd做的,确实是写起来很简单也很短,但TLE了N个点,所以(怕麻烦,别学我,这几种方法都打打)改成了Ford。

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int n,m,ans;
    int u[N],v[N],w[N];
    int dis[N];
    void ford(){
        for(int i=1;i<=n;i++)dis[i]=1e9;
        dis[1]=0;
        for(int k=1;k<=n;k++){
            for(int i=1;i<=m;i++){
                if(dis[v[i]]>dis[u[i]]+w[i]){
                    dis[v[i]]=dis[u[i]]+w[i];
                }
            }
        }
    }
    
    
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&u[i],&v[i],&w[i]);
        }
        ford();
        for(int i=1;i<=n;i++)ans+=dis[i];
        for(int i=1;i<=m;i++){
            swap(u[i],v[i]);
        }
        ford();
        for(int i=1;i<=n;i++)ans+=dis[i];
        printf("%d
    ",ans);
        return 0;
    }

    OVER:

    点关注不迷路,点推荐不妄心

  • 相关阅读:
    请求页面
    获取iframe内的元素
    jquery 判断checkbox是否被选中问题
    bootStrap 模板地址
    content
    基于JS的文本验证
    canvas 移动光速特效-
    Swift 语法
    Xcode 8 Swift 类似插件方法
    js整频滚动展示效果(函数节流鼠标滚轮事件)
  • 原文地址:https://www.cnblogs.com/LightyaChoo/p/13231986.html
Copyright © 2020-2023  润新知