Pagini recente » Cod sursa (job #1703195) | Cod sursa (job #1363086) | Cod sursa (job #800283) | Cod sursa (job #1911496) | Cod sursa (job #3194136)
#include <bits/stdc++.h>
#pragma GCC optimize "03"
using namespace std;
#define INFILE "dijkstra.in"
#define OUTFILE "dijkstra.out"
const int N_MAX = 50005;
const int INF = 1e9;
struct Node {
int node;
int price;
Node() : node(0), price(0) {}
Node(int _node, int _price) : node(_node), price(_price) {}
bool operator<(const Node &other) const {
return (this -> price > other.price);
}
};
int nodes, edges;
int dist[N_MAX];
bool visited[N_MAX];
vector<Node> adj[N_MAX];
void dijkstra(int source){
for(int i = 1; i <= nodes; ++i) dist[i] = INF;
dist[source] = 0;
priority_queue<Node> q;
q.push(Node(1, 0));
while(!q.empty()){
int node = q.top().node;
int price = q.top().price;
q.pop();
if(dist[node] != price) continue;
for(int i = 0; i < adj[node].size(); ++i){
Node to = adj[node][i];
if(price + to.price < dist[to.node]){
dist[to.node] = price + to.price;
q.push(Node(to.node, dist[to.node]));
}
}
}
}
void solve(){
cin >> nodes >> edges;
for(int i = 0; i < edges; ++i){
int node1, node2, price; cin >> node1 >> node2 >> price;
adj[node1].push_back(Node(node2, price));
}
dijkstra(1);
for(int i = 2; i <= nodes; ++i){
cout << (dist[i] == INF ? 0 : dist[i]) << " ";
}
}
int main(){
ios_base::sync_with_stdio(false);
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
cin.tie(0), cout.tie(0);
solve();
return 0;
}