Pagini recente » Cod sursa (job #1044480) | Cod sursa (job #866182) | Cod sursa (job #1347307) | Cod sursa (job #70021) | Cod sursa (job #1914010)
#include <bits/stdtr1c++.h>
#define INF 16e5
#define maxn 500001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector < pair <int, int> > A[maxn];
vector < pair <int, int> > ::iterator it;
set <pair <int, int> > h;
int D[maxn];
int N, M, x0 = 1;
void init() {
int x, y, c;
fin >> N >> M;
for(int i=0; i < M; i++) {
fin >> x >> y >> c;
A[x].push_back(make_pair(y,c));
}
for(int i=1; i<=N; i++) D[i] = INF;
D[x0] = 0;
}
void dijkstra() {
int node, to, cost;
h.insert(make_pair(0,x0));
while(!h.empty()) {
node = h.begin()->second;
h.erase(h.begin());
for(it = A[node].begin(); it != A[node].end(); ++it) {
to = it->first;
cost = it->second;
if(D[to] > D[node] + cost) {
if(D[to] != INF) h.erase(h.find(make_pair(D[to], to)));
D[to] = D[node] + cost;
h.insert(make_pair(D[to], to));
}
}
}
}
int main()
{
init();
dijkstra();
for(int i=2; i <= N; i++ ){
fout << D[i] << " ";
}
return 0;
}