DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

트리 뽑아내기

返回题目

题解

리프 정점을 제거하는 연산을 반복하면, 남아 있는 정점들은 항상 연결되어 있다. 반대로 트리의 임의의 연결 부분트리를 하나 정하면, 그 밖의 정점들은 바깥쪽 리프부터 제거하여 모두 없앨 수 있다.

따라서 문제는 가중치 합이 최대인 연결 부분트리를 찾는 문제와 같다.

트리를 정점 111을 루트로 잡아 생각하자. dpudp_udpu​를 정점 uuu를 포함하고, uuu의 서브트리 안에서만 고르는 연결 부분트리의 최대 가중치 합이라고 하자.

자식 vvv에 대해 dpvdp_vdpv​가 양수라면 vvv 쪽 부분트리를 붙이는 것이 이득이고, dpvdp_vdp가 음수라면 붙이지 않는 것이 이득이다. 따라서 다음 점화식이 성립한다.

dpu=Au+∑v: v는 u의 자식max⁡(0,dpv)dp_u=A_u+\sum_{v:\,v\text{는 }u\text{의 자식}}\max(0,dp_v)dpu​=Au​+

정답은 모든 정점 uuu에 대한 dpudp_udpu​의 최댓값이다. 모든 가중치가 음수일 수도 있으므로, 정답을 dp1dp_1dp1​만으로 두면 안 되고 모든 정점에서 최댓값을 보아야 한다.

정답의 절댓값은 323232비트 정수 범위를 넘을 수 있으므로 646464비트 정수를 사용해야 한다.

시간 복잡도는 O(N)O(N)O(N)이다.

v
​
v:v는 u의 자식
∑
​
max
(
0
,
d
pv​
)