Pagini recente » Cod sursa (job #1657353) | Cod sursa (job #1362380) | Cod sursa (job #1985005) | Cod sursa (job #882776) | Cod sursa (job #2932092)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N, M;
fin >> N >> M;
vector <vector<pair<int, int>>> graph(N, vector<pair<int, int>>());
vector <bool> seen(N, false);
for (int i = 0; i < M; ++i) {
int u, v, c;
fin >> u >> v >> c;
--u; --v;
graph[u].push_back(make_pair(v, c));
}
priority_queue <pair <int, int>> pq;
vector <int> dist(N, (1 << 30));
pq.push(make_pair(0, 0));
dist[0] = 0;
while (!pq.empty()) {
int node = pq.top().second;
pq.pop();
if (!seen[node]) {
seen[node] = true;
for (auto& x : graph[node]) {
if (dist[x.first] > dist[node] + x.second) {
dist[x.first] = dist[node] + x.second;
pq.push(make_pair(-dist[x.first], x.first));
}
}
}
}
for (int i = 1; i < N; ++i) {
if (dist[i] == (1 << 30)) {
dist[i] = 0;
}
fout << dist[i] << " ";
}
fin.close();
fout.close();
return 0;
}