Pagini recente » Cod sursa (job #1807984) | Cod sursa (job #2155283) | Cod sursa (job #1594799) | Borderou de evaluare (job #1791036) | Cod sursa (job #1867650)
#include <cstdio>
#include <vector>
#include <deque>
#define pb push_back
#define mp make_pair
#define NMAX 50005
#define INF 20000000
using namespace std;
FILE *f = freopen("dijkstra.in", "r", stdin);
FILE *g = freopen("dijkstra.out", "w", stdout);
vector < pair <int, int> > G[NMAX];
vector < pair <int, int> > :: iterator it;
deque <int> q;
bool viz[NMAX];
int N, M, dmin[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));
}
}
void dijkstra(int start) {
for(int i = 0; i<NMAX; i++)
dmin[i] = INF;
q.pb(start);
viz[start] = true;
dmin[start] = 0;
while(!q.empty()) {
int nod = q.front();
q.pop_front();
viz[nod] = false;
for(it = G[nod].begin(); it != G[nod].end(); it++)
{
if(dmin[nod] + it -> second < dmin[it -> first]) {
dmin[it -> first] = dmin[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++)
printf("%d ", dmin[i] < INF? dmin[i] : 0);
return 0;
}