全 WA 了
查看原帖
全 WA 了
360331
int64楼主2021/8/18 22:53

算法:堆优化 Dij

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<iomanip>
#include<vector>
#include<set>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);

using namespace std;

#define inf 0x3f3f3f3f
#define int long long
#define endl '\n'

const int maxn = 10010;
const int maxm = 500010;

struct node {
    int v, w;
    node() {

    }
    node(int vv, int ww) {
        v = vv;
        w = ww;
    }
};

vector<node> g[maxn];
int n, m, s;
int dis[maxn];
set<pair<int, int>> minHeap;

signed main() {
    IOS;
    cin >> n >> m >> s;
    for (int i = 0; i < m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        g[u].push_back(node(v, w));
        g[v].push_back(node(u, w));
    }
    for (int i = 0;i < maxn;i++) {
        dis[i] = inf;
    }
    dis[s] = 0;

    minHeap.insert(make_pair(0, s));
    while (minHeap.size()) {
        int mind = minHeap.begin()->first;
        int v = minHeap.begin()->second;
        minHeap.erase(minHeap.begin());
        for (int i = 0;i < g[v].size();i++) {
            if (dis[g[v][i].v] > dis[v] + g[v][i].w) {
                minHeap.erase(make_pair(dis[g[v][i].v], g[v][i].v));
                dis[g[v][i].v] = dis[v] + g[v][i].w;
                minHeap.insert(make_pair(dis[g[v][i].v], g[v][i].v));
            }
        }
    }

    for (int i = 1; i <= n; i++) {
        if (dis[i] > inf) {
            cout << inf << ' ';
        }
        else cout << dis[i] << " ";
    }
    return 0;
}

//Fununugugu Code

我太菜了 /dk/dk/dk

2021/8/18 22:53
加载中...