Pagini recente » Cod sursa (job #727408) | Cod sursa (job #894213) | Cod sursa (job #651564) | Cod sursa (job #1390554) | Cod sursa (job #1024700)
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
#include <vector>
#define maxN 50005
#define maxM 250005
#define INF 1000000
using namespace std;
int N, M, c, x, y;
vector<pair<int, int> > arr[maxN];
vector<int> cost(maxN, INF), vizitat(maxN, 0);
void citireMuchii() {
for(int i = 1; i <= M; ++i) {
scanf("%d %d %d", &x, &y, &c);
arr[x].push_back(make_pair(y, c));
}
}
void afisareMuchii() {
for(int i = 1; i <= N; ++i) {
printf("%d: ", i);
for(int j = 0; (unsigned)j < arr[i].size(); ++j) {
printf(" %d, c = %d ", arr[i][j].first, arr[i][j].second);
}
printf("\n");
}
}
void dijkstra(int start) {
int pmin, pminA, pminC, calcActual, m;
cost[start] = 0;
vizitat[start] = 0;
for(int i = 1; i <= N; ++i) {
m = INF;
for(int j = 1; j <= N; ++j) {
if (cost[j] < m && !vizitat[j]) {
m = cost[j]; pmin = j;
}
}
vizitat[pmin] = 1;
for(int k = 0; (unsigned)k < arr[pmin].size(); ++k) {
pminA = arr[pmin][k].first;
pminC = arr[pmin][k].second;
calcActual = cost[pmin] + pminC;
if (cost[pminA] > calcActual)
cost[pminA] = calcActual;
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &N, &M);
citireMuchii();
// afisareMuchii();
// printf("=============================================");
dijkstra(1);
for(int i = 2; i <= N; ++i)
printf("%d ", (cost[i] == INF) ? 0: cost[i]);
return 0;
}