Pagini recente » Cod sursa (job #2533999) | Cod sursa (job #318773) | Cod sursa (job #2864287) | Cod sursa (job #1506396) | Cod sursa (job #1061991)
#include <cstdio>
#include <vector>
#include <queue>
#define MAXN 50005
const int inf = 1 << 30;
using namespace std;
queue<int> q;
vector< pair<int, int> > dist[MAXN];
int d[MAXN];
int N, M;
void inline read() {
freopen("dijkstra.in","r", stdin);
freopen("dijkstra.out","w", stdout);
scanf("%d %d", &N, &M);
int to, from, cost;
for(int i = 1; i <= M; i++) {
scanf("%d %d %d", &from, &to, &cost);
dist[from].push_back(make_pair(to, cost));
}
}
void dijkstra() {
q.push(1);
d[1] = 0;
for(int i = 2; i <= N; i++)
d[i] = inf;
while(!q.empty()) {
int node = q.front();
q.pop();
for(vector< pair<int, int> >::iterator p = dist[node].begin(); p != dist[node].end(); ++p){
if (d[node] + p -> second < d[p -> first]){
d[p -> first] = d[node] + p -> second;
q.push(p -> first);
}
}
}
}
void inline print() {
for(int i = 2; i <= N; i++)
printf("%d ", d[i] == inf ? 0 : d[i]);
}
int main(){
read();
dijkstra();
print();
return 0;
}