Pagini recente » Cod sursa (job #958796) | Cod sursa (job #1913094) | Cod sursa (job #1432751) | Cod sursa (job #782338) | Cod sursa (job #2036437)
//Algoritmul lui dijktra cu set
#include <fstream>
#include <vector>
#include <set>
#define DEF 50001
#define INF 50000000000
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m;
long long d[DEF];
vector < pair <int, int> > L[DEF];
set < pair <int, int> > S;
int main () {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y, z;
fin >> x >> y >> z;
L[x].push_back (make_pair (y, z));
}
for (int i = 2; i <= n; i++) {
d[i] = INF;
}
S.insert (make_pair (0, 1));
while (!S.empty ()) {
int nod = S.begin () -> second;
S.erase (S.begin ());
for (vector < pair <int, int> >::iterator it = L[nod].begin (); it != L[nod].end (); it++) {
int vecin = it -> first,
cost = it -> second;
if (d[vecin] > d[nod] + cost) {
if (d[vecin] != INF)
S.erase (S.find (make_pair (d[vecin], vecin)));
d[vecin] = d[nod] + cost;
S.insert (make_pair (d[vecin], vecin));
}
}
}
for (int i = 2; i <= n; i++) {
if (d[i] == INF)
fout << "0 ";
else
fout << d[i] << " ";
}
return 0;
}