Pagini recente » Cod sursa (job #124543) | Monitorul de evaluare | Cod sursa (job #2072783) | Statistici vrum vrum (AH1488) | Cod sursa (job #520012)
Cod sursa(job #520012)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxN = 251000;
const long long inf = 100000000000000000LL;
int N, R, P, M, start;
vector <int> G[maxN], cost[maxN];
long long cMin[maxN];
int Q[maxN * 50];
bool viz[maxN];
inline int next(int x) {
x++;
if (x >= maxN * 50)
x -= maxN * 50;
return x;
}
inline void bford(int nod) {
int i;
int p, u, fiu;
p = u = 1;
Q[p] = nod;
while (p <= u) {
nod = Q[p];
// fprintf(stderr, "%d %d\n", nod, p);
viz[nod] = 0;
for (i = 0; i < G[nod].size(); i++) {
fiu = G[nod][i];
if (cMin[fiu] > cMin[nod] + cost[nod][i]) {
// fprintf(stderr, "fiu: %d\n", fiu);
cMin[fiu] = cMin[nod] + cost[nod][i];
if (!viz[fiu]) {
viz[fiu] = 1;
u = next(u);
Q[u] = fiu;
}
}
}
p = next(p);
}
}
int main() {
int i;
int a, b, c;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d", &N, &M);
start = 1;
for (i = 1; i <= M; i++) {
scanf("%d %d %d", &a, &b, &c);
G[a].push_back(b);
cost[a].push_back(c);
}
for (i = 1; i <= N; i++)
cMin[i] = inf;
cMin[start] = 0;
memset(viz, 0, sizeof(viz));
bford(start);
for (i = 2; i <= N; i++)
if (cMin[i] == inf)
printf("0 ");
else
printf("%lld ", cMin[i]);
return 0;
}