Pagini recente » Cod sursa (job #3294244) | Asociatia infoarena | Cod sursa (job #3293047) | Monitorul de evaluare | Cod sursa (job #3293370)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e4;
const int MAXM = 25e4;
const int MAXVAL = 2e4;
vector<int> dijkstra(int s, const vector<vector<pair<int, int>>> &g)
{
vector<int> d(g.size(), 0);
auto comp = [](pair<int, int> &a, pair<int, int> &b) -> bool
{ return a.second > b.second; };
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(comp)> pq;
pq.push({s, 0});
pair<int, int> node;
while (!pq.empty())
{
node = pq.top();
pq.pop();
if (d[node.first] != node.second)
continue;
for (auto &x : g[node.first])
{
if (x.first != s && (d[x.first] == 0 || d[x.first] > node.second + x.second))
{
d[x.first] = node.second + x.second;
pq.push({x.first, d[x.first]});
}
}
}
return d;
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<vector<pair<int, int>>> g(n + 2);
for (int i = 1; i <= m; ++i)
{
int a, b, c;
cin >> a >> b >> c;
g[a].push_back({b, c});
}
auto dists = dijkstra(1, g);
for (int i = 2; i <= n; ++i)
cout << dists[i] << ' ';
cout << '\n';
return 0;
}