Pagini recente » Cod sursa (job #2628869) | Cod sursa (job #797071) | Cod sursa (job #571231) | Cod sursa (job #50119) | Cod sursa (job #3219954)
#include <bits/stdc++.h>
#include <vector>
#define oo ((1LL<<31)-1)
#define MAXN 50009
#define FIN "dijkstra.in"
#define FOUT "dijkstra.out"
using namespace std;
vector<int> V[MAXN];
vector<int> C[MAXN];
queue<int> Queue;
bitset<MAXN> inQueue(0);
int distMIN[MAXN];
int nodes,
edges;
void readData() {
int x,
y,
cost;
freopen(FIN, "r", stdin);
scanf("%d %d", &nodes, &edges);
//printf("%d %d", nodes, edges);
for(int ed = 1; ed <= edges; ed++) {
scanf("%d %d %d",&x, &y,&cost);
V[ x ].push_back( y );
C[ x ].push_back( cost );
}
fclose( stdin );
}
void dijkstra() {
for(int i = 2; i <= nodes; ++i) distMIN[ i ] = oo;
distMIN[ 1 ] = 0;
Queue.push( 1 );
inQueue[ 1 ] = true;
while(!Queue.empty()) {
int curr = Queue.front();
Queue.pop();
inQueue[ curr ] = false;
for(int i = 0; i < V[curr].size(); ++i) {
int y = V[ curr ][ i ];
int cost = C[ curr ][ i ];
if(distMIN[ y ] > distMIN[ curr ] + cost) {
distMIN[ y ] = distMIN[ curr ] + cost;
if(!inQueue[ y ]) {
Queue.push( y );
inQueue[ y ] = true;
}
}
}
}
}
void writeData() {
freopen(FOUT, "w", stdout);
for(int i = 2; i <= nodes; ++i)
printf("%d ", (distMIN[ i ] < oo) ? distMIN[ i ] : 0);
fclose(stdout);
}
int main(int argc, char const *argv[]) {
readData();
dijkstra();
writeData();
return 0;
}