Submission #1168921

#TimeUsernameProblemLanguageResultExecution timeMemory
1168921MuhammetBeads and wires (APIO14_beads)C++20
100 / 100
133 ms46832 KiB
#include "bits/stdc++.h" using namespace std; #define ff first #define ss second #define ll long long #define SZ(s) (int)s.size() const int N = 2e5 + 5; vector <pair <int, int>> v[N]; ll dp[N][2], ans = 0, dp1[N][2], vis[N], kk[N]; multiset <ll> st[N]; void f(int x, int y) { vector <pair <int, int>> v1; ll w = 0, s = 0, s1 = 0; for(auto i : v[x]) { if(i.ff == y) { w = i.ss; continue; } f(i.ff, x); v1.push_back({i.ff, i.ss}); s += max(dp[i.ff][0], dp[i.ff][1]); } dp[x][0] = dp[x][1] = s; for(int i = 0; i < SZ(v1); i++) { int a = v1[i].ff, wa = v1[i].ss; dp[x][1] = max(dp[x][1], w + s - max(dp[a][0], dp[a][1]) + dp[a][0] + wa); } } void fn(int x, int y, int ww) { if(!vis[y]) { for(auto [i, w] : v[y]) { kk[y] += max(dp1[i][0], dp1[i][1]); st[y].insert(dp1[i][0] + w - max(dp1[i][0], dp1[i][1])); } while(SZ(st[y]) > 2) st[y].erase(st[y].begin()); vis[y] = true; } bool tr = 0; dp1[y][1] = dp1[y][0] = kk[y] - max(dp1[x][0], dp1[x][1]); if(st[y].find(dp1[x][0] + ww - max(dp1[x][0], dp1[x][1])) != st[y].end()) st[y].erase(st[y].find(dp1[x][0] + ww - max(dp1[x][0], dp1[x][1]))), tr = 1; if(SZ(st[y]) > 0) dp1[y][1] = max(dp1[y][1], ww + kk[y] - max(dp1[x][0], dp1[x][1]) + *st[y].rbegin()); if(tr == 1) st[y].insert(dp1[x][0] + ww - max(dp1[x][0], dp1[x][1])); ll k = 0; for(auto [i, w] : v[x]) { k += max(dp1[i][0], dp1[i][1]); } ans = max(ans, k); for(auto [i, w] : v[x]) { if(i != y) fn(i, x, w); } dp1[y][0] = dp[y][0]; dp1[y][1] = dp[y][1]; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; for(int i = 1; i < n; i++) { int a, b, c; cin >> a >> b >> c; v[a].push_back({b, c}); v[b].push_back({a, c}); } f(1, 0); for(int i = 1; i <= n; i++) { dp1[i][0] = dp[i][0]; dp1[i][1] = dp[i][1]; } fn(1, 0, 0); cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...