Pagini recente » Cod sursa (job #291205) | Cod sursa (job #1550998) | Cod sursa (job #159878) | Cod sursa (job #2388869) | Cod sursa (job #999059)
Cod sursa(job #999059)
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#define pii pair <int, int>
#define vi vector <int>
#define vii vector <pii>
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define NMAX 50005
#define INF 1000000000
using namespace std;
int n, m;
vector <pii> A[NMAX];
priority_queue <pii, vii, greater <pii> > Q;
vi D;
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int i, x, y, z, cost;
scanf("%d%d", &n, &m);
for (i = 1; i <= m; i++)
{
scanf("%d%d%d", &x, &y, &z);
A[x].pb(mp(y, z));
}
D.assign(n + 1, INF);
Q.push(mp(0, 1)); D[1] = 0;
while (!Q.empty())
{
x = Q.top().x; y = Q.top().y;
Q.pop();
if (x > D[y])
continue ;
for (i = 0; i < (int)A[y].size(); i++)
{
z = A[y][i].x; cost = A[y][i].y;
if (D[z] > x + cost)
{
D[z] = x + cost;
Q.push(mp(D[z], z));
}
}
}
for (i = 2; i <= n; i++)
printf("%d ", (D[i] == INF) ? 0 : D[i]);
printf("\n");
return 0;
}