제출 #1171886

#제출 시각아이디문제언어결과실행 시간메모리
1171886lopkusCheap flights (LMIO18_pigus_skrydziai)C++20
0 / 100
498 ms63912 KiB
#include <bits/stdc++.h> int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m; std::cin >> n >> m; std::vector<std::pair<int,int64_t>> adj[n + 1]; std::map<std::pair<int,int>, int64_t> cost; for(int i = 1; i <= m; i++) { int u, v, c; std::cin >> u >> v >> c; adj[u].push_back({v, c}); adj[v].push_back({u, c}); cost[{u, v}] = c; cost[{v, u}] = c; } int64_t ans = 0; for(int i = 1; i <= n; i++) { int64_t sum = 0; for(auto [y, c] : adj[i]) { sum += c; } ans = std::max(ans, sum); } std::vector<int> was(n + 1); std::vector<int> P(n + 1); std::vector<std::array<int64_t, 3>> back_edges; std::vector<int> in(n + 1); int tt = 1; std::function<void(int, int)> dfs = [&] (int u, int p) { was[u] = 1; P[u] = p; in[u] = tt++; for(auto [v, w] : adj[u]) { if(v == p) { continue; } if(was[v]) { back_edges.push_back({v, u, w}); } else { dfs(v, u); } } }; dfs(1, 0); for(auto [u, v, c] : back_edges) { if(in[u] < in[v]) { continue; } if(P[P[u]] == v) { ans = std::max(ans, cost[{u, P[u]}] + cost[{P[u], v}] + c); } } std::cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...