第三个点卡了
#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;
}