90分求助
查看原帖
90分求助
610410
fenboQAQ楼主2023/7/3 11:09

第三个点卡了

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 100005;
const int INF = 0x3f3f3f3f;

struct Edge {
    int to, w;
    bool operator < (const Edge& other) const {
        return w > other.w;
    }
};

vector<Edge> edge[MAXN];
int dist[MAXN], vis[MAXN];

inline void addEdge(int u, int v, int w) {
    edge[u].push_back({v, w});
}

inline void dijkstra(int s) {
    memset(dist, INF, sizeof(dist));
    memset(vis, false, sizeof(vis));
    dist[s] = 0;
    priority_queue<Edge> pq;
    pq.push({s, 0});
    while (!pq.empty()) {
        int u = pq.top().to;
        pq.pop();
        if (vis[u]) {
            continue;
        }
        vis[u] = true;
        for (int i = 0; i < edge[u].size(); i++) {
    		int v = edge[u][i].to;
    		int w = edge[u][i].w;
    		if (dist[v] > dist[u] + w) {
        	dist[v] = dist[u] + w;
        	pq.push({v, dist[v]});
    	}
}

    }
}

int main() {
    int n, m, s;
    scanf("%d%d%d", &n, &m, &s);
    for (int i = 1; i <= m; i++) {
        int u, v, w;
        scanf("%d%d%d", &u, &v, &w);
        addEdge(u, v, w);
    }
    dijkstra(s);
    for (int i = 1; i <= n; i++) {
        printf("%d ", dist[i]);
    }
    printf("\n");
    return 0;
}
2023/7/3 11:09
加载中...