求助!本蒟蒻只有90(狂WA
查看原帖
求助!本蒟蒻只有90(狂WA
605295
r1atsa1a楼主2022/9/20 21:56

用的Dijkstra堆优化版。只拿了90分。

#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N = 1e4 + 10, M = 5e5 + 10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> PII;
int vex, acs, st;
int h[M], w[M], e[M], ne[M], idx = 0;
int dist[N];
bool vis[N];
void add(int a, int b, int wi) {
    w[idx] = wi, e[idx] = b;
    ne[idx] = h[a], h[a] = idx;
    idx ++;
}
void Dijkstra(int u) {
    priority_queue<PII, vector<PII>, greater<>> heap;
    memset(dist, INF, sizeof dist);
    dist[u] = 0;
    heap.push({dist[u], u});
    while (heap.size()) {
        auto t = heap.top();
        heap.pop();
        int ver = t.second, dis = t.first;
        if (vis[ver]) continue;
        vis[ver] = true;
        for (int i = h[ver]; i != -1; i = ne[i]) {
            int k = e[i];
            if (dist[k] > w[i] + dis) {
                dist[k] = w[i] + dis;
                heap.push({dist[k], k});
            }
        }
    }
}
int main() {
    memset(h, -1, sizeof h);
    memset(vis, false, sizeof vis);
    cin >> vex >> acs >> st;
    while (acs --) {
        int a, b, w;
        cin >> a >> b >> w;
        add(a, b, w);
    }
    Dijkstra(st);
    for (int i = 1; i <= vex; i ++) cout << dist[i] << " ";
}
2022/9/20 21:56
加载中...