Pagini recente » Cod sursa (job #1099604) | Cod sursa (job #1274563) | Cod sursa (job #1227827) | Cod sursa (job #2831077) | Cod sursa (job #1250262)
/// Craciun Catalin
/// Implementare Dijkstra - set
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#define inf 1000000000
#define NMax 200005
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
vector<int> V[NMax], C[NMax];
int d[NMax];
set < pair<int, int> > B;
void dijkstra_set() {
for (int i=2;i<=n;i++)
d[i] = inf;
B.insert(mp(0,1));
while (!B.empty()) {
int val = (*B.begin()).first, x = (*B.begin()).second;
B.erase(*B.begin());
for (int i=0;i<V[x].size();i++) {
if (d[ V[x][i] ] > val + C[x][i]) {
d[ V[x][i] ] = val + C[x][i];
B.insert(mp(d[ V[x][i] ], V[x][i]));
}
}
}
}
int main() {
f>>n>>m;
for (int i=1;i<=n;i++) {
int a,b,c;
f>>a>>b>>c;
V[a].pb(b);
C[a].pb(c);
}
dijkstra_set();
for (int i=2;i<n;i++) {
if (d[i] == inf)
g<<0<<' ';
else
g<<d[i]<<' ';
}
if (d[n] == inf)
g<<0<<' ';
else
g<<d[n]<<' ';
f.close(); g.close();
return 0;
}