Pagini recente » Cod sursa (job #2950749) | Cod sursa (job #2805849) | Cod sursa (job #2843580) | Cod sursa (job #3245589) | Cod sursa (job #1065330)
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#define pii pair<int, int>
#define MAXN 50005
const int inf = 1 << 30;
using namespace std;
priority_queue <pii, vector<pii>, greater<pii> > Q;
vector <pii> d[MAXN];
int dist[MAXN];
int N, M;
void read() {
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d", &N, &M);
int from, to, cost;
for(int i = 0; i < M; i++) {
scanf("%d %d %d", &from, &to, &cost);
d[from].push_back(make_pair(cost, to));
}
}
void inline init() {
dist[1] = 0;
for(int i = 2; i <= N; i++)
dist[i] = inf;
}
void solve() {
Q.push(make_pair(dist[1], 1));
while(!Q.empty()) {
int cost = Q.top().first;
int index = Q.top().second;
Q.pop();
if (cost > dist[index])
continue;
for(int i = 0; i < (int)d[index].size(); i++) {
if (d[index][i].first + cost < dist[d[index][i].second]) {
dist[d[index][i].second] = d[index][i].first + cost;
Q.push(make_pair(dist[d[index][i].second], d[index][i].second));
}
}
}
}
void inline print() {
for(int i = 2; i <= N; i++)
printf("%d ", dist[i] == inf ? 0 : dist[i]);
}
int main(){
read();
init();
solve();
print();
return 0;
}