Pagini recente » Cod sursa (job #1280102) | Cod sursa (job #285274) | Cod sursa (job #1074885) | Cod sursa (job #167174) | Cod sursa (job #1897665)
#include <cstdio>
#include <deque>
#include <vector>
#define INF 1e9
#define NMAX 100000
#define pb push_back
#define mp make_pair
using namespace std;
FILE *f = freopen("dijkstra.in", "r", stdin);
FILE *g = freopen("dijkstra.out", "w", stdout);
bool viz[NMAX];
vector < pair <int, int> > G[NMAX];
vector < pair <int, int> > :: iterator it;
int dist[NMAX + 1];
deque <int> q;
int n, m;
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));
}
}
void dijkstra(int start) {
for(int i = 0; i<=NMAX; i++)
dist[i] = INF;
q.pb(start);
dist[start] = 0;
viz[start] = true;
while(!q.empty()) {
int nod = q.front();
q.pop_front();
viz[nod] = false;
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("%d ", dist[i]);
else printf("0 ");
return 0;
}