论dijkstra的实现
查看原帖
论dijkstra的实现
375030
CG__HeavenHealer楼主2021/7/3 19:02

pair 就能A,用自定义的结构体就会WA /kk

这是结构体的

struct node {
    int dist, id;
    node() {}
    node(int _, int __) : dist(_), id(__) {}
    inline bool operator<(const node &x) const {
        return dist == x.dist ? id < x.id : dist < x.dist;
    }
};
inline void Dijkstra(int s) {
    priority_queue<node> q;
    memset(vis, 0, sizeof(vis));
    memset(dis, 0x3f, sizeof(dis));
    dis[s] = 0;
    q.push(node(0, s));
    while (!q.empty()) {
        int u = q.top().id;
        q.pop();
        if (vis[u]) continue;
        vis[u] = true;
        for (ri i = head[u]; i; i = e[i].nxt) {
            int v = e[i].to, w = e[i].w;
            if (dis[v] >= dis[u] + w) {
                dis[v] = dis[u] + w;
                pre[v] = i;
                q.push(node(dis[v], v));
            }
        }
    }
}

这是 pair

#define P pair<int, int>
#define mp make_pair
inline void Dijkstra(int s) {
    priority_queue<P, vector<P>, greater<P> > q;
    memset(vis, 0, sizeof(vis));
    memset(dis, 0x3f, sizeof(dis));
    dis[s] = 0;
    q.push(mp(0, s));
    while (!q.empty()) {
        int u = q.top().second;
        q.pop();
        if (vis[u]) continue;
        vis[u] = true;
        for (ri i = head[u]; i; i = e[i].nxt) {
            int v = e[i].to, w = e[i].w;
            if (dis[v] >= dis[u] + w) {
                dis[v] = dis[u] + w;
                pre[v] = i;
                q.push(mp(dis[v], v));
            }
        }
    }
}
2021/7/3 19:02
加载中...