Pagini recente » Solutia problemei shoturi | Cod sursa (job #537712) | Cod sursa (job #1638852) | Cod sursa (job #1010576) | Cod sursa (job #1867591)
#include <cstdio>
#include <vector>
#include <deque>
#define NMAX 50000
#define pb push_back
#define mp make_pair
#define INF 1e9
using namespace std;
FILE *f = freopen("dijkstra.in", "r", stdin);
FILE *g = freopen("dijkstra.out", "w", stdout);
vector < pair <int, int> > G[NMAX];
std:: vector < pair <int, int > > :: iterator it;
deque <int> q;
int N, M, dist[NMAX];
bool viz[NMAX];
void read() {
scanf("%d%d", &N, &M);
for(int i = 1; i<=M; i++) {
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
G[x].pb(mp(y, z));
//G[y].pb(mp(x, z));
}
}
void dijkstra(int start) {
for(int i = 0; i<NMAX; i++)
dist[i] = INF;
q.pb(start);
viz[start] = true;
dist[start] = 0;
while(!q.empty()) {
int nod = q.front();
q.pop_front();
for(it = G[nod].begin(); it != G[nod].end(); ++it) {
if(dist[nod] + it -> second < dist[it -> first]){
dist[it -> first] = dist[nod] + it -> second;
if(!viz[it -> first]) {
q.pb(it -> first);
viz[it -> first] = true;
}
}
}
}
}
int main() {
read();
dijkstra(1);
for(int i = 2; i<=N; i++)
if(dist[i] == INF) printf("0 ");
else
printf("%d ", dist[i]);
return 0;
}