Pagini recente » Monitorul de evaluare | Cod sursa (job #3359066) | Cod sursa (job #3359041) | Cod sursa (job #3359044) | Cod sursa (job #3361248)
#include <fstream>
#include <vector>
#include <queue>
#define int long long
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
const int INF=1e18;
struct Edge {
int to;
int w;
};
int n,m;
vector<Edge> adj[50005];
int dist[50005];
signed main() {
cin>>n>>m;
for (int i=1; i<=m; ++i) {
int u, v, w;
cin>>u>>v>>w;
adj[u].push_back({v, w});
}
for (int i=1; i<=n; ++i) {
dist[i]=INF;
}
dist[1]=0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push({0, 1});
while (!pq.empty()) {
auto [d, u]=pq.top();
pq.pop();
if (d>dist[u]) continue;
for (auto &edge:adj[u]) {
int v=edge.to;
int w=edge.w;
if (dist[v]>dist[u]+w) {
dist[v]=dist[u]+w;
pq.push({dist[v], v});
}
}
}
for (int i=2; i<=n; ++i) {
if (dist[i]==INF) {
dist[i]=0;
}
cout<<dist[i]<<(i==n ? "" : " ");
}
}