Skip to content

Commit be75cd0

Browse files
authored
Merge pull request #1304 from AlgorithmWithGod/khj20006
[20251103] BOJ / P3 / 도시 정비 / 권혁준
2 parents f5b9088 + 0635e63 commit be75cd0

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
```cpp
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
using ll = long long;
5+
6+
int N;
7+
vector<vector<int>> v(1000001);
8+
ll inmx[1000001]{}, outmx[1000001]{}, ex[1000001]{}, val[1000001]{}, a[1000001]{};
9+
ll ans = 0;
10+
11+
void dfs1(int n, int p) {
12+
inmx[n] = a[n];
13+
ll mx1 = 0, mx2 = 0;
14+
for (int i : v[n]) if (i != p) {
15+
dfs1(i, n);
16+
if (inmx[i] > mx1) mx2 = mx1, mx1 = inmx[i];
17+
else if (inmx[i] > mx2) mx2 = inmx[i];
18+
inmx[n] = max(inmx[n], inmx[i]);
19+
}
20+
for (int i : v[n]) if (i != p) {
21+
if (inmx[i] == mx1) ex[i] = mx2;
22+
else ex[i] = mx1;
23+
val[n] += inmx[i];
24+
}
25+
}
26+
27+
void dfs2(int n, int p) {
28+
outmx[n] = max({ outmx[p], (ll)a[p], ex[n] });
29+
ans = max(ans, val[n] + outmx[n]);
30+
for (int i : v[n]) if (i != p) dfs2(i, n);
31+
}
32+
33+
int main() {
34+
cin.tie(0)->sync_with_stdio(0);
35+
36+
cin >> N;
37+
for (int i = 1; i <= N; i++) cin >> a[i];
38+
for (int i = 1, c, d; i < N; i++) {
39+
cin >> c >> d;
40+
v[c].push_back(d);
41+
v[d].push_back(c);
42+
}
43+
dfs1(1, 0);
44+
dfs2(1, 0);
45+
46+
cout << ans;
47+
48+
}
49+
```

0 commit comments

Comments
 (0)