Pagini recente » Monitorul de evaluare | Cod sursa (job #1480573) | Cod sursa (job #1074294) | Cod sursa (job #1479027) | Cod sursa (job #2049716)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int N_MAX = 50005;
const int oo = 2000000000;
int N, M, D[N_MAX];
bool S[N_MAX];
vector <pair <int, int> > G[N_MAX];
void Dijkstra(){
for (int i = 2;i <= N; ++i)
D[i] = oo;
for (int k = 1; k < N; ++k){
int minim = oo, Nod, cost;
for (int j = 1; j <= N; ++j)
if (D[j] <= minim && S[j] == 0){
minim = D[j];
Nod = j;
}
S[Nod] = 1;
for (int i = 0; i < (int)G[Nod].size(); ++i){
int vecin = G[Nod][i].first, cost = G[Nod][i].second;
D[vecin] = min (D[vecin], D[Nod] + cost);
}
}
}
int main(){
in >> N >> M;
for (int i = 1; i <= M; ++i){
int x, y, z; in >> x >> y >> z;
G[x].push_back(make_pair(y, z));
}
Dijkstra();
for (int i = 2; i <= N; ++i)
if (D[i])
out << D[i] << " ";
else out << "0" << " ";
out << '\n';
in.close(); out.close();
return 0;
}