Pagini recente » Cod sursa (job #227968) | Istoria paginii utilizator/domnii | Monitorul de evaluare | Cod sursa (job #1151245) | Cod sursa (job #1427056)
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 80000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int N, M, costuri[250000];
bool seen[nmax];
vector <pair <int,int>> graf[nmax];
int main()
{int i, a, cost, b, vizibile, minime, nrMin, j;
f>>N>>M;
vizibile = N - 1;
for(i = 2; i <= N; ++i)
costuri[i] = 1100;
costuri[1] = 0;
for(i = 1; i <= M; ++i){
f>>a>>b>>cost;
graf[a].push_back(make_pair(b, cost));
}
bool update = 1;
while(vizibile && update){
minime = 10000;
update = false;
for(i = 1; i <= N; ++i)
if(!seen[i] && costuri[i] < minime){
minime = costuri[i];
nrMin = i;
}
seen[nrMin] = true;
for(j = 0; j < graf[nrMin].size(); ++j){
if(costuri[nrMin] + graf[nrMin][j].second < costuri[graf[nrMin][j].first]){
costuri[graf[nrMin][j].first] = costuri[nrMin] + graf[nrMin][j].second;
update = true;
--vizibile;
}
}
}
for(i = 2; i <= N; ++i){
if(costuri[i] != 1100)
g<<costuri[i]<<' ';
else g<<0<<' ';
}
g<<'\n';
return 0;
}