Pagini recente » Cod sursa (job #2605959) | Cod sursa (job #2268258) | Cod sursa (job #2128504) | Cod sursa (job #2815124) | Cod sursa (job #774483)
Cod sursa(job #774483)
#include <stdio.h>
#include <map>
#include <vector>
#include <queue>
using namespace std;
#define INF 1000000000
vector < pair<int, int> > noduri[50005];
int d[50005];
bool inq[50005];
queue<int> Q;
void solve () {
Q.push(0);
inq[0] = true;
d[0] = 0;
while (!Q.empty())
{
int i = Q.front();
Q.pop();
inq[i] = false;
for (vector< pair<int, int> >::iterator it = noduri[i].begin(); it != noduri[i].end(); it++) {
if (it->second + d[i] < d[it->first])
{
d[it->first] = it->second + d[i];
if (!inq[it->first])
{
Q.push(it->first);
inq[it->first] = true;
}
}
}
}
}
int main () {
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
int n, m, x, y, z;
scanf ("%d %d", &n, &m);
for (int i = 0; i < m; i++)
{
scanf ("%d %d %d", &x, &y, &z);
noduri[x - 1].push_back (make_pair (y - 1, z));
}
for (int i = 0; i < n; i++)
{
inq[i] = false;
d[i] = INF;
}
solve();
for (int i = 1; i < n; i++)
{
if (d[i] == INF)
printf("0 ");
else
printf ("%d ", d[i]);
}
return 0;
}