제출 #1171879

#제출 시각아이디문제언어결과실행 시간메모리
1171879lopkusCheap flights (LMIO18_pigus_skrydziai)C++20
0 / 100
49 ms31988 KiB
#include <bits/stdc++.h> const int N = 2e5 + 5; int found = 0; int ans; std::vector<int> adj[N]; std::vector<int> P(N); std::vector<int> dist(N); std::vector<int> real_dist(N); struct DSU { void add(int i) { P[i] = i; adj[i].push_back(i); dist[i] = 0; real_dist[i] = 0; } void connect(int u, int v, int c) { if(P[u] == P[v]) { if(dist[u] + dist[v] == 2) { found = 1; ans = std::max(ans, real_dist[u] + real_dist[v] + c); } return; } u = P[u]; v = P[v]; if(adj[u].size() > adj[v].size()) { std::swap(u, v); } for(int i = 0; i < adj[u].size(); i++) { int node = adj[u][i]; dist[node] += 1; real_dist[node] += c; adj[v].push_back(node); P[node] = v; } adj[u].clear(); } }dsu; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m; std::cin >> n >> m; std::vector<std::pair<int,int>> g[n + 1]; std::vector<std::array<int, 3>> edges; for(int i = 1; i <= m; i++) { int u, v, c; std::cin >> u >> v >> c; g[u].push_back({v, c}); g[v].push_back({u, c}); edges.push_back({c, u, v}); } for(int i = 1; i <= n; i++) { int sum = 0; for(auto [y, c] : g[i]) { sum += c; } ans = std::max(ans, sum); } for(int i = 1; i <= n; i++) { dsu.add(i); } sort(edges.rbegin(), edges.rend()); for(auto [c, u, v] : edges) { dsu.connect(u, v, c); if(found) { break; } } 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...