2024/2/18 图论 最短路入门 dijkstra 2

Dijkstra?

Problem - 20C - Codeforces

思路:

用dijkstra算法,在更新最短距离的时候在加一个存点的步骤,最后输出就可以了

p[i]是i的上一个点

完整代码:

#include <bits/stdc++.h>
#define int long long
#define PII std::pair<int,int>
const int N = 1e5 + 10;
int p[N];
signed main() {
    int n, m;
    int k = 0;
    std::cin >> n >> m;
    std::vector<std::vector<PII>> g(n + 1);
    std::vector<int> dist(n + 1, LLONG_MAX);
    std::vector<bool> vis(n + 1);
    dist[1] = 0;
    for (int i = 1; i <= m; i++) {
        int u, v, w;
        std::cin >> u >> v >> w;
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }
    std::priority_queue<PII, std::vector<PII >, std::greater<>> q;
    q.push({0, 1});//存dist和点
    while (!q.empty()) {
        auto node = q.top();
        q.pop();
        int cur = node.second;
        if (vis[cur] == true)
            continue;
        vis[cur] = true;
        for (int i = 0; i < g[cur].size(); i++) {
            int e = g[cur][i].first;
            int w = g[cur][i].second;
            if (dist[e] > dist[cur] + w) {
                p[e] = cur;//从cur走到e
                dist[e] = dist[cur] + w;
                q.push({dist[e], e});
            }
        }
    }
    if(dist[n]==LLONG_MAX)
        std::cout<<-1;
    else {
        std::vector<int> a(n + 1);
        for (int i = n; i != 1; i = p[i]) {
            a[k++] = i;
        }
        std::cout << 1 << " ";
        for (int i = k - 1; i >= 0; i--) {
            std::cout << a[i] << " ";
        }
    }
//    std::cout<<dist[n];
    return 0;
}

相关推荐

  1. 2024/2/18 短路入门 dijkstra 2

    2024-02-19 10:32:02       67 阅读
  2. 2024/2/18 短路入门 floyd 1

    2024-02-19 10:32:02       55 阅读
  3. 0基础刷短路 2(从ATcoder 0分到1800分)

    2024-02-19 10:32:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 10:32:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 10:32:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 10:32:02       87 阅读
  4. Python语言-面向对象

    2024-02-19 10:32:02       96 阅读

热门阅读

  1. 【图论经典题目讲解】洛谷 P5304 旅行者

    2024-02-19 10:32:02       53 阅读
  2. fabric-contract-api-go快速上手

    2024-02-19 10:32:02       55 阅读
  3. k8s的一些关键信息(归类摘抄,非提炼)

    2024-02-19 10:32:02       40 阅读
  4. Latex一些报错问题总结

    2024-02-19 10:32:02       50 阅读
  5. vue3导入文件夹、导入文件、导出zip、导出

    2024-02-19 10:32:02       57 阅读
  6. 单例模式的优点和缺点分别是什么?

    2024-02-19 10:32:02       45 阅读
  7. 微服务- 熔断、降级和限流

    2024-02-19 10:32:02       50 阅读
  8. CSS如何将图片变为圆形?

    2024-02-19 10:32:02       48 阅读
  9. tcpdump

    2024-02-19 10:32:02       43 阅读