#3 TLE,求调
查看原帖
#3 TLE,求调
1282133
wty2024楼主2025/1/21 22:01

堆优化dijkstra,邻接表实现,测试点3过不去

#include <iostream>
#include <vector>
#include <queue>
#include <climits>
#define MAXN 200001
using namespace std;

struct E {
    int v, w;
};
struct cmp {
    bool operator()(E a, E b) {
        return a.w > b.w;
    }
};
int n, m, s;
vector<E> graph[MAXN];
int dist[MAXN];
int vis[MAXN];
priority_queue<E, vector<E>, cmp> heap;

void dijkstra() {
    fill(dist + 1, dist + n + 1, INT_MAX);
    fill(vis + 1, vis + n + 1, false);
    dist[s] = 0;
    heap.push({s, 0});
    while (!heap.empty()) {
        int u = heap.top().v; heap.pop();
        if (vis[u])
            continue;
        for (E e : graph[u]) {
            int v = e.v, w = e.w;
            if (!vis[v] && dist[u] + w < dist[v]) {
                dist[v] = dist[u] + w;
                heap.push({v, dist[v]});
            }
        }
    }
}

int main() {
    scanf("%d%d%d", &n, &m, &s);
    for (int i = 1, u, v, w; i <= m; i++) {
        scanf("%d%d%d", &u, &v, &w);
        graph[u].push_back({v, w});
    }
    dijkstra();
    for (int i = 1; i <= n; i++) {
        printf("%d ", dist[i]);
    }
    printf("\n");
}
2025/1/21 22:01
加载中...