Submission #1080968

#TimeUsernameProblemLanguageResultExecution timeMemory
1080968avighnaAesthetic (NOI20_aesthetic)C++17
20 / 100
2098 ms39508 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; } if (m == n - 1) { // there will only be one path std::set<ll> edges; std::function<bool(ll, ll)> dfs; ll def = 0; dfs = [&](ll node, ll par) { if (node == n) { return true; } for (auto &[ch, w, i] : adj[node]) { if (ch == par) { continue; } if (dfs(ch, node)) { edges.insert(i); def += w; return true; } } return false; }; dfs(1, 0); ll ans = def; ll worst_road = roads[m - 1]; for (ll i = m - 2; i >= 0; --i) { if (edges.count(i)) { ans = std::max(ans, def + worst_road); } worst_road = std::max(worst_road, roads[i]); } std::cout << ans << '\n'; return 0; } // 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...