Submission #1080862

#TimeUsernameProblemLanguageResultExecution timeMemory
1080862avighnaAesthetic (NOI20_aesthetic)C++17
13 / 100
2072 ms33084 KiB
#include <bits/stdc++.h> typedef long long ll; struct To { ll v, w; ll i; }; const ll inf = 1e15; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); ll n, m; std::cin >> n >> m; std::vector<std::vector<To>> adj(n + 1); std::vector<ll> roads(m); for (ll i = 0, u, v, w; i < m; ++i) { std::cin >> u >> v >> w; adj[u].push_back({v, w, i}); adj[v].push_back({u, w, i}); roads[i] = w; } // exclude edge i auto sssp = [&](ll i, ll add) { std::vector<ll> ans(n + 1, inf); std::vector<bool> vis(n + 1); std::priority_queue<std::pair<ll, ll>> pq; pq.push({0, 1}); while (!pq.empty()) { auto [d, node] = pq.top(); d *= -1; pq.pop(); if (vis[node]) { continue; } vis[node] = true; for (auto [ch, w, cur_i] : adj[node]) { if (cur_i == i) { w += add; } if (ans[ch] > d + w) { ans[ch] = d + w; pq.push({-ans[ch], ch}); } } } return ans; }; ll def = sssp(-1, 0)[n]; ll ans = def; ll worst_road = roads[m - 1]; for (ll i = m - 2; i >= 0; --i) { ans = std::max(ans, sssp(i, worst_road)[n]); worst_road = std::max(worst_road, roads[i]); } std::cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...