Pagini recente » Cod sursa (job #1704780) | Cod sursa (job #2819734) | Cod sursa (job #3282760) | Cod sursa (job #2332836) | Cod sursa (job #2851572)
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define forn(i,n) for(int i=0;i<n;i++)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(),v.rend()
#define pb push_back
#define sz(a) (int)a.size()
template<typename T>
pair<vector<T>, vector<int>> Dijkstra(int start, vector<vector<pair<int,T>>> adj, T mx) {
int n = adj.size();
priority_queue<pair<T, int>> q;
vector<T> dist(n, mx);
vector<int> parent(n, -1);
dist[start] = 0;
q.push({0, start});
while(!q.empty()) {
int u = q.top().second;
T dist_u = -q.top().first;
q.pop();
if(dist_u != dist[u]) continue;
for(auto x: adj[u]) {
int v = x.first;
T w = x.second;
if(dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
parent[v] = u;
q.push({-dist[v], v});
}
}
}
return {dist, parent};
//start, adjlist, fill_max
}
void solve() {
int n, m;
cin >> n >> m;
vector<vector<pair<int, ll>>> adj(n);
for(int i = 0;i < m; ++i) {
int u, v, w;
cin >> u >> v >> w; --u, --v;
adj[u].pb({v, w});
}
vector<ll> dist = Dijkstra(0, adj, (ll)1e16).first;
for(int i = 1;i < n; ++i) {
cout << (dist[i] == (ll)1e16 ? 0 : dist[i]) << " ";
}
}
int32_t main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
//cin >> t;
while(t--) {
solve();
}
}