Pagini recente » Cod sursa (job #2233581) | Cod sursa (job #2218908) | Cod sursa (job #114726) | Cod sursa (job #2480759) | Cod sursa (job #1449341)
#include <cstdio>
#include <vector>
#define INF ((1LL<<30)-1)
#define DIM 250000
#define f first
#define s second
using namespace std;
int N, M, W[DIM], D[DIM], minim, pos, X, Y, Z;
vector <pair <int, int> > V[DIM];
inline int Select_Minim(){
int pos = -1, minim = INF;
for(int i = 1; i <= N; i ++)
if(W[i] == 0 && minim > D[i]){
minim = D[i];
pos = i;
}
return pos;
}
int main(){
freopen("dijkstra.in" ,"r", stdin );
freopen("dijkstra.out","w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= M; i ++){
scanf("%d %d %d", &X, &Y, &Z);
V[X].push_back(make_pair(Y, Z));
}
for(int i = 2; i <= N; i ++)
D[i] = INF;
for(int k = 1; k <= N; k ++){
pos = Select_Minim();
if(pos == -1)
break;
W[pos] = 1;
for(int i = 0; i < V[pos].size(); i ++){
X = V[pos][i].f;
Y = V[pos][i].s;
if(W[X] == 0 && D[X] > D[pos] + Y)
D[X] = D[pos] + Y;
}
}
for(int i = 2; i <= N; i ++)
printf("%d ", D[i]);
return 0;
}