[模板]Dijkstra算法 WA 0

#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<bool> vis;
vector<int> dis;
vector<vector<pair<int, int>>> edg;
int main()
{
    // freopen("dijkstras/uoj1.in", "r", stdin);
    // freopen("dijkstras/uoj1.out", "w", stdout);
    cin >> n >> m;
    priority_queue<pair<int, int>> pq;
    edg.resize(n + 1);
    dis.resize(n + 1, INT_MAX);
    vis.resize(n + 1, 0);
    for (int i = 1; i <= m; i++)
    {
        int u, v, w;
        cin >> u >> v >> w;
        edg[u].push_back({w, v});
    }
    dis[1] = 0;
    pq.push({0, 1});
    while (!pq.empty())
    {
        auto hd = pq.top();
        pq.pop();
        if (vis[hd.second])
            continue;
        vis[hd.second] = 1;
        for (auto targ : edg[hd.second])
        {
            if (dis[targ.second] > dis[hd.second] + targ.first)
            {
                dis[targ.second] = dis[hd.second] + targ.first;
                if (!vis[targ.second])
                    pq.push({dis[targ.second], targ.second});
            }
        }
    }
    for (int i = 1; i <= n; i++)
        if (dis[i] == INT_MAX)
            cout << "inf" << " ";
        else
            cout << dis[i] << " ";
    // fclose(stdin);
    // fclose(stdout);
    return 0;
}

kanbudong

首先要开long long

还是寄

dijkstra里面for(auto ...)里面一定有问题

循环里面有问题

用小根堆!!!

用了

默认就是小根吧?()

默认是大根!!

改成小根堆!!

priority_queue<pair<int, int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
1 个赞

有朝一日还是败在了自己最熟悉的stl上啊!

image

给解决方案

给了

thank

@我命由我不由天 关帖吧