Pagini recente » Cod sursa (job #2464627) | Cod sursa (job #614860) | Cod sursa (job #1362467) | Cod sursa (job #1886100) | Cod sursa (job #1486185)
/**
* Worg
*/
#include <queue>
#include <bitset>
#include <vector>
#include <cstring>
#include <fstream>
#define fi first
#define mp make_pair
#define pb push_back
#define se second
#define dim 50500
#define inf 2000000000
#define inFile "dijkstra.in"
#define outFile "dijkstra.out"
using namespace std;
vector < pair<int,int> > G[dim];
vector < pair<int,int> >::iterator it;
queue < int > Q;
bitset < dim > inQueue;
int dmin[dim];
int n, m;
void readData() {
int x, y, z;
ifstream cin(inFile);
cin >> n >> m;
for(int i = 1; i <= m; ++i) {
cin >> x >> y >> z;
G[x].pb(mp(y, z));
}
}
void dijkstra() {
int node;
for(int i = 1; i <= n; ++i)
dmin[i] = inf;
dmin[1] = 0;
inQueue[1] = 1;
Q.push(1);
while(!Q.empty()) {
node = Q.front(); Q.pop();
inQueue[node] = 0;
for(it = G[node].begin(); it != G[node].end(); ++it)
if(dmin[node] + it->se < dmin[it->fi]) {
dmin[it->fi] = dmin[node] + it->se;
if(!inQueue[it->fi]) {
inQueue[it->fi] = 1;
Q.push(it->fi);
}
}
}
}
void writeData() {
ofstream cout(outFile);
for(int i = 2; i <= n; ++i)
cout << (dmin[i] == inf ? 0 : dmin[i]) << " ";
}
int main() {
readData();
dijkstra();
writeData();
return 0;
}