1
0

AtCoder-abc340_d.cpp 915 B

123456789101112131415161718192021222324252627282930
  1. #include <functional>
  2. #include <iostream>
  3. #include <limits>
  4. #include <queue>
  5. #include <utility>
  6. #include <vector>
  7. using namespace std;
  8. int main() {
  9. ios::sync_with_stdio(false);
  10. cin.tie(nullptr);
  11. int n; cin >> n;
  12. vector<vector<pair<int, long long>>> g(n);
  13. for (int i = 0; i + 1 < n; ++i) {
  14. long long a, b; int x; cin >> a >> b >> x; --x;
  15. g[i].push_back({i + 1, a}); g[i].push_back({x, b});
  16. }
  17. const long long inf = numeric_limits<long long>::max() / 4;
  18. vector<long long> dist(n, inf); dist[0] = 0;
  19. priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> pq;
  20. pq.push({0, 0});
  21. while (!pq.empty()) {
  22. auto [d, u] = pq.top(); pq.pop();
  23. if (d != dist[u]) continue;
  24. for (auto [v, w] : g[u]) if (dist[v] > d + w) {
  25. dist[v] = d + w; pq.push({dist[v], v});
  26. }
  27. }
  28. cout << dist[n - 1] << '\n';
  29. }