From 0635e63bc67c46cf3ee0632c599add74dd369b9b Mon Sep 17 00:00:00 2001 From: oncsr Date: Mon, 3 Nov 2025 23:08:20 +0900 Subject: [PATCH] =?UTF-8?q?[20251103]=20BOJ=20/=20P3=20/=20=EB=8F=84?= =?UTF-8?q?=EC=8B=9C=20=EC=A0=95=EB=B9=84=20/=20=EA=B6=8C=ED=98=81?= =?UTF-8?q?=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\213\234 \354\240\225\353\271\204.md" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "khj20006/202511/03 BOJ P3 \353\217\204\354\213\234 \354\240\225\353\271\204.md" diff --git "a/khj20006/202511/03 BOJ P3 \353\217\204\354\213\234 \354\240\225\353\271\204.md" "b/khj20006/202511/03 BOJ P3 \353\217\204\354\213\234 \354\240\225\353\271\204.md" new file mode 100644 index 00000000..226a1bf7 --- /dev/null +++ "b/khj20006/202511/03 BOJ P3 \353\217\204\354\213\234 \354\240\225\353\271\204.md" @@ -0,0 +1,49 @@ +```cpp +#include +using namespace std; +using ll = long long; + +int N; +vector> v(1000001); +ll inmx[1000001]{}, outmx[1000001]{}, ex[1000001]{}, val[1000001]{}, a[1000001]{}; +ll ans = 0; + +void dfs1(int n, int p) { + inmx[n] = a[n]; + ll mx1 = 0, mx2 = 0; + for (int i : v[n]) if (i != p) { + dfs1(i, n); + if (inmx[i] > mx1) mx2 = mx1, mx1 = inmx[i]; + else if (inmx[i] > mx2) mx2 = inmx[i]; + inmx[n] = max(inmx[n], inmx[i]); + } + for (int i : v[n]) if (i != p) { + if (inmx[i] == mx1) ex[i] = mx2; + else ex[i] = mx1; + val[n] += inmx[i]; + } +} + +void dfs2(int n, int p) { + outmx[n] = max({ outmx[p], (ll)a[p], ex[n] }); + ans = max(ans, val[n] + outmx[n]); + for (int i : v[n]) if (i != p) dfs2(i, n); +} + +int main() { + cin.tie(0)->sync_with_stdio(0); + + cin >> N; + for (int i = 1; i <= N; i++) cin >> a[i]; + for (int i = 1, c, d; i < N; i++) { + cin >> c >> d; + v[c].push_back(d); + v[d].push_back(c); + } + dfs1(1, 0); + dfs2(1, 0); + + cout << ans; + +} +```