Pagini recente » Cod sursa (job #987014) | Cod sursa (job #2020672) | Cod sursa (job #2402368) | Cod sursa (job #1117217) | Cod sursa (job #1882357)
#include <bits/stdc++.h>
#define in f
#define out g
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF = 2e9;
const int MAX_SIZE = 2e5 + 10;
auto cmp = [](pair<int, int> a, pair<int, int> b) -> bool {
return a.second > b.second;
};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> Q(cmp);
vector<pair<int, int>> G[MAX_SIZE];
int n, m;
int dist[MAX_SIZE];
bool visited[MAX_SIZE];
void read() {
in >> n;
in >> m;
int x, y, z;
for (int i = 1; i <= m; i++) {
in >> x;
in >> y;
in >> z;
G[x].push_back({y, z});
}
}
void dijkstra(int vertex) {
for (int i = 1; i <= n; i++)
dist[i] = INF;
dist[vertex] = 0;
visited[vertex] = true;
Q.push({vertex, 0});
while (!Q.empty()) {
pair<int, int> current = Q.top();
Q.pop();
for (auto adj : G[current.first]) {
if (!visited[adj.first] &&
dist[current.first] + adj.second < dist[adj.first]) {
dist[adj.first] = dist[current.first] + adj.second;
Q.push({adj.first, dist[adj.first]});
visited[current.first] = true;
}
}
}
for (int i = 1; i <= n; i++) {
if (i != vertex) {
if (dist[i] == INF)
out << "0 ";
else
out << dist[i] << " ";
}
}
}
int main() {
read();
dijkstra(1);
return 0;
}