Pagini recente » Cod sursa (job #2493109) | Cod sursa (job #2786171) | Cod sursa (job #995155) | Cod sursa (job #1395646) | Cod sursa (job #2878174)
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
#define inf (1 << 30)
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n, m;
vector<vector<pair<int, int>>> G;
vector<int> D;
bitset<50001> AP;
struct compare {
bool operator() (int x, int y) {
return D[x] > D[y];
}
};
void dijkstra(int k) {
priority_queue<int, vector<int>, compare> Q;
Q.push(k);
AP[k] = 1;
D[k] = 0;
while (!Q.empty()) {
int x = Q.top();
Q.pop();
AP[x] = 0;
for (auto y : G[x]) {
int v = y.first;
int c = y.second;
if (D[x] + c < D[v]) {
D[v] = D[x] + c;
if (AP[v] == 0) {
Q.push(v);
AP[v] = 1;
}
}
}
}
}
int main() {
cin >> n >> m;
G = vector<vector<pair<int, int>>> (n + 1);
D = vector<int> (n + 1, inf);
for (int i = 1, a, b, c; i <= m; ++i)
cin >> a >> b >> c, G[a].push_back(make_pair(b, c));
dijkstra(1);
for (int i = 2; i <= n; ++i)
if (D[i] != inf) cout << D[i] << " ";
else cout << "0 ";
cin.close();
cout.close();
return 0;
}