Pagini recente » Cod sursa (job #386606) | Cod sursa (job #1672322) | Cod sursa (job #2838219) | Cod sursa (job #1411795) | Cod sursa (job #3146530)
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
#define INFILE "dijkstra.in"
#define OUTFILE "dijkstra.out"
typedef long long ll;
const int VMAX = 50002;
const ll INFINIT = (1 << 31) - 1;
struct Edge {
int node;
int price;
};
int n, m;
vector<Edge> adj[VMAX];
bool viz[VMAX];
ll dist[VMAX];
void dijkstra(int source){
priority_queue<int, vector<int>, greater<int> > q;
for(int i = 1; i <= n; ++i){
dist[i] = INFINIT;
}
dist[source] = 0;
q.push(source);
viz[source] = true;
while(!q.empty()){
int node = q.top();
q.pop();
viz[node] = false;
for(size_t i = 0; i < adj[node].size(); ++i){
Edge to = adj[node][i];
if(dist[node] + to.price < dist[to.node]){
dist[to.node] = dist[node] + to.price;
if(!viz[to.node]){
q.push(to.node);
viz[to.node] = true;
}
}
}
}
}
void solve(){
cin >> n >> m;
for(int i = 0; i < m; ++i){
int node1, node2, price;
Edge edge;
cin >> node1 >> node2 >> price;
edge.node = node2;
edge.price = price;
adj[node1].push_back(edge);
}
dijkstra(1);
for(int i = 2; i <= n; ++i){
if(dist[i] == INFINIT){
cout << 0 << " ";
}
else{
cout << dist[i] << " ";
}
}
}
int main(){
ios_base::sync_with_stdio(false);
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
return 0;
}