Pagini recente » Cod sursa (job #2086223) | Cod sursa (job #1858300) | Cod sursa (job #2165056) | Cod sursa (job #1999502) | Cod sursa (job #2431843)
#include <bits/stdc++.h>
#define INF 999999999
#define NMAX 250005
using namespace std;
FILE *fin = fopen("dijkstra.in", "r");
FILE *fout = fopen("dijkstra.out", "w");
struct muchie{
int dest;
int cost;
friend bool operator >(muchie a, muchie b);
};
muchie aux, nou;
bool operator >(muchie a, muchie b){
if(a.cost < b.cost)
return 0;
return 1;
}
priority_queue<muchie, vector<muchie>, greater<muchie> > Heap;
vector<int> vecini[NMAX], costuri[NMAX];
int n, m, i, x, y, z, cmin[NMAX], uz[NMAX], nr;
int main(){
fscanf(fin, "%d%d", &n, &m);
for(i=1; i<=m; ++i){
fscanf(fin, "%d%d%d", &x, &y, &z);
vecini[x].push_back(y);
costuri[x].push_back(z);
}
for(i=2; i<=m; ++i)
cmin[i] = INF;
for(i=0; i<vecini[1].size(); ++i){
cmin[vecini[1][i]] = costuri[1][i];
aux.dest = vecini[1][i];
aux.cost = cmin[vecini[1][i]];
Heap.push(aux);
}
cmin[1] = 0;
uz[1] = 1;
while(nr<n && !Heap.empty()){
aux = Heap.top();
Heap.pop();
if(uz[aux.dest] == 0){
uz[aux.dest] = 1;
++nr;
for(i=0; i<vecini[aux.dest].size(); ++i){
if(cmin[aux.dest] + costuri[aux.dest][i] < cmin[vecini[aux.dest][i]]){
cmin[vecini[aux.dest][i]] = cmin[aux.dest] + costuri[aux.dest][i];
nou.dest = vecini[aux.dest][i];
nou.cost = cmin[vecini[aux.dest][i]];
Heap.push(nou);
}
}
}
}
for(i=2; i<=n; ++i)
if(cmin[i] == INF)
fprintf(fout, "0 ");
else
fprintf(fout, "%d ", cmin[i]);
return 0;
}