제출 #734197

#제출 시각아이디문제언어결과실행 시간메모리
734197SanguineChameleon구슬과 끈 (APIO14_beads)C++17
28 / 100
1084 ms14932 KiB
#include <bits/stdc++.h> using namespace std; void just_do_it(); int main() { #ifdef KAMIRULEZ freopen("kamirulez.inp", "r", stdin); freopen("kamirulez.out", "w", stdout); #endif ios_base::sync_with_stdio(0); cin.tie(0); just_do_it(); return 0; } const int maxN = 2e5 + 20; vector<pair<int, int>> adj[maxN]; int par_w[maxN]; int dp[maxN][2]; int tot[maxN]; multiset<int> gain[maxN]; void dfs(int u, int p) { tot[u] = 0; gain[u].clear(); for (auto x: adj[u]) { int v = x.first; int w = x.second; if (v != p) { par_w[v] = w; dfs(v, u); tot[u] += max(dp[v][0], dp[v][1]); gain[u].insert(w + dp[v][0] - max(dp[v][0], dp[v][1])); } } dp[u][0] = tot[u]; dp[u][1] = tot[u] + (!gain[u].empty() ? *gain[u].rbegin() + par_w[u] : 0); } void just_do_it() { int n; cin >> n; for (int i = 0; i < n - 1; i++) { int u, v, w; cin >> u >> v >> w; adj[u].emplace_back(v, w); adj[v].emplace_back(u, w); } int res = 0; for (int u = 1; u <= n; u++) { dfs(u, -1); res = max(res, dp[u][0]); } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...