Pagini recente » Cod sursa (job #755691) | Cod sursa (job #1826666) | Cod sursa (job #198571) | Cod sursa (job #1435621) | Cod sursa (job #3241929)
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define F first
#define S second
#define endl '\n'
#define aint(a) (a).begin(),(a).end()
using namespace std;
const int maxn = 250005;
#define INF 1LL << 61
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
void dijkstra(int s, const vector<vector<pair<int, int>>>& adj , vector<int> &dist, vector<int> &pre){
dist[s]=0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
q.push({0, s});
while (!q.empty()) {
int u = q.top().S, d = q.top().F;
q.pop();
if (d != dist[u]) continue;
for (auto& edge : adj[u]) {
int v = edge.F, w = edge.S;
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pre[v] = u;
q.push({dist[v], v});
}
}
}
}
void solve() {
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(maxn, vector<pair<int, int>>());
while (m--) {
int x, y, c;
fin >> x >> y >> c;
x--;
y--;
adj[x].pb({y, c});
}
vector<int> dist(n, maxn), prev(n, -1);
dijkstra(0, adj, dist, prev);
for (auto v : dist) {
if (v == 0) continue;
if (v == maxn) v = 0;
fout << v << " ";
}
fout << endl;
}
int main() {
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}