Pagini recente » Evacuare | Cod sursa (job #184974) | Cod sursa (job #839990) | Cod sursa (job #570514) | Cod sursa (job #295020)
Cod sursa(job #295020)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
#define pb push_back
#define tr(c, i) for (typeof((c).begin()) i = (c).begin(); i != (c).end(); ++i)
const int oo = 1<<30;
typedef pair<int, int> pii;
int N;
vector< vector<pii> > G;
vector<int> D;
void dijkstra(int S, vector<int> &D) {
D.resize(N+1);
fill(D.begin(), D.end(), oo);
set<pii> Q;
Q.insert(pii(0, S));
D[S] = 0;
while (!Q.empty()) {
int u = Q.begin()->second;
int d = Q.begin()->first;
Q.erase(Q.begin());
tr(G[u], vv) {
int v = vv->first;
if (D[u] + vv->second < D[v]) {
if (D[v] != oo)
Q.erase(pii(D[v], v));
D[v] = D[u] + vv->second;
Q.insert(pii(D[v], v));
}
}
}
}
int main(int argc, char *argv[]) {
int M, u, v, w;
ifstream fin("dijkstra.in");
fin >> N >> M;
G.resize(N+1);
while (M--) {
fin >> u >> v >> w;
G[u].pb(pii(v, w));
}
fin.close();
dijkstra(1, D);
ofstream fout("dijkstra.out");
for (vector<int>::const_iterator ii = D.begin()+2; ii != D.end(); ++ii)
fout << (*ii == oo ? 0 : *ii) << " ";
fout << endl;
fout.close();
return 0;
}