zoukankan      html  css  js  c++  java
  • AcWing 1129. 热浪 spfa

    德克萨斯纯朴的民众们这个夏天正在遭受巨大的热浪!!!
    
    他们的德克萨斯长角牛吃起来不错,可是它们并不是很擅长生产富含奶油的乳制品。
    
    农夫John此时身先士卒地承担起向德克萨斯运送大量的营养冰凉的牛奶的重任,以减轻德克萨斯人忍受酷暑的痛苦。
    
    John已经研究过可以把牛奶从威斯康星运送到德克萨斯州的路线。
    
    这些路线包括起始点和终点一共有 T 个城镇,为了方便标号为 1 到 T。
    
    除了起点和终点外的每个城镇都由 双向道路 连向至少两个其它的城镇。
    
    每条道路有一个通过费用(包括油费,过路费等等)。
    
    给定一个地图,包含 C 条直接连接 2 个城镇的道路。
    
    每条道路由道路的起点 Rs,终点 Re 和花费 Ci 组成。
    
    求从起始的城镇 Ts 到终点的城镇 Te 最小的总费用。
    
    输入格式
    第一行: 4 个由空格隔开的整数: T,C,Ts,Te;
    
    第 2 到第 C+1 行: 第 i+1 行描述第 i 条道路,包含 3 个由空格隔开的整数: Rs,Re,Ci。
    
    输出格式
    一个单独的整数表示从 Ts 到 Te 的最小总费用。
    
    数据保证至少存在一条道路。
    
    数据范围
    1≤T≤2500,
    1≤C≤6200,
    1≤Ts,Te,Rs,Re≤T,
    1≤Ci≤1000
    输入样例:
    7 11 5 4
    2 4 2
    1 4 3
    7 2 2
    3 4 3
    5 7 5
    7 3 3
    6 1 1
    6 3 4
    2 4 3
    5 6 3
    7 2 1
    输出样例:
    7

    解答

    // 123335.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <vector>
    #include <queue>
    #include <cstring>
    
    using namespace std;
    
    
    const int N = 2510;
    const int C = 6500;
    
    
    int n, m, s, e;
    
    vector<pair<int, int>> g[N];
    
    int dist[N];
    bool st[N];
    
    int spfa(int x, int y)
    {
        memset(dist, 0x3f, sizeof dist);
        dist[x] = 0;
    
        queue<int> q;
        q.push(x);
        st[x] = true;
    
        while (q.size()) {
            int t = q.front(); q.pop();
    
            st[t] = false;
    
            for (int i = 0; i < g[t].size(); i++) {
                int b = g[t][i].first;
                int w = g[t][i].second;
                if (dist[b] > dist[t] + w) {
                    dist[b] = dist[t] + w;
                    if (!st[b]) {
                        q.push(b);
                        st[b] = true;
                    }
                }
            }
        }
    
    
        return dist[y];
    }
    
    int main()
    {
        cin >> n >> m >> s >> e;
    
        for (int i = 0; i < m; i++) {
            int a, c, b;
            cin >> a >> b >> c;
            g[a].push_back({ b,c });
            g[b].push_back({ a,c });
        }
    
        cout << spfa(s, e);
    
    
        return 0;
    }
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    蓝屏的钙,好喝的钙
    正则
    JavaScript 获取当前时间戳 (3种方式)
    react-native upoad imagepicker
    xmlhttprequest请求
    修改配置使fiddler可以查看https请求
    安装composer
    判定 android IOS
    看端口任务
    squid 缓存Internet 软件
  • 原文地址:https://www.cnblogs.com/itdef/p/13246064.html
Copyright © 2011-2022 走看看