Pagini recente » Cod sursa (job #2073957) | Cod sursa (job #358725) | Cod sursa (job #2304476) | Cod sursa (job #766591) | Cod sursa (job #2105524)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#define N 50005
#define node first
#define cost second
#define INF (1LL << 61)
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<pair<int,int> > g[N];
bitset<N> v;
long long d[N];
int n, m;
void dijkstra() {
long long mn;
int crnode;
fill(d + 1, d + n + 1, INF);
d[1] = 0;
for (int i = 1; i <= n; i++) {
mn = INF;
for (int j = 1; j <= n; j++) {
if (d[j] < mn && !v[j]) {
mn = d[j];
crnode = j;
}
}
v[crnode] = 1;
for (int j = 0; j < g[crnode].size(); j++) {
if (!v[g[crnode][j].node])
d[g[crnode][j].node] = min(d[g[crnode][j].node], d[crnode] + g[crnode][j].cost);
}
}
}
int main() {
in >> n >> m;
int a, b, c;
for (int i = 1; i <= m; i++) {
in >> a >> b >> c;
g[a].push_back(make_pair(b, c));
}
dijkstra();
for (int i = 2; i <= n; i++)
out << (d[i] != INF ? d[i] : 0) << " ";
return 0;
}