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

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

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

서브트리의 최소 길이합

返回题目

题解

현재 주요 정점들의 집합을 SSS라고 하자. SSS가 비어 있거나 원소가 하나뿐이면 답은 000이다.

트리를 111번 정점을 루트로 잡고 DFS를 한다. 정점 vvv의 DFS 방문 시각을 tin[v]tin[v]tin[v]라고 하자. SSS의 정점들을 tintintin이 증가하는 순서대로 v1,v2,…,vkv_1,v_2,\ldots,v_kv1​,v2​,…,vk​라고 쓰고, vk+1=v1v_{k+1}=v_1vk+1​=v1​이라고 하자. 다음 값을 정의한다.

C(S)=∑i=1kdist(vi,vi+1)C(S)=\sum_{i=1}^{k} dist(v_i,v_{i+1})C(S)=i=1∑k​dist(v

이때 답은 C(S)/2C(S)/2C(S)/2이다.

이를 보이자. SSS의 모든 정점을 포함하는 최소 연결 부분트리를 TST_STS​라고 하자. TST_STS​의 임의의 간선 ee를 제거하면 는 두 컴포넌트로 나뉘며, 양쪽 컴포넌트에는 각각 적어도 하나의 주요 정점이 있다. DFS 순서로 주요 정점들을 원형으로 나열하면 한쪽 컴포넌트에 있는 주요 정점들의 구간과 다른쪽 컴포넌트에 있는 주요 정점들의 구간 사이를 넘어가는 인접쌍이 정확히 두 번 생긴다. 따라서 에서 간선 의 길이는 정확히 두 번 더해진다. 모든 간선에 대해 같은 논리가 성립하므로 이고, 답은 이다.

이제 현재 주요 정점들을 tintintin 순서의 ordered set으로 관리하고, 현재 C(S)C(S)C(S) 값을 64비트 정수 변수로 유지한다.

정점 xxx를 추가한다고 하자. 현재 집합이 비어 있지 않다면, 원형 tintintin 순서에서 xxx의 바로 이전 정점을 ppp, 바로 다음 정점을 nnn이라고 하자. 기존에는 ppp와 이 인접해 있었으므로 이 더해져 있었다. 를 추가하면 이 항이 사라지고 와 이 생기므로 다음과 같이 갱신한다.

C←C+dist(p,x)+dist(x,n)−dist(p,n)C\leftarrow C+dist(p,x)+dist(x,n)-dist(p,n)C←C+dist(p,x)+dist(x,n)−

정점 xxx를 제거할 때는 반대로 다음 갱신을 적용한다.

C←C−dist(p,x)−dist(x,n)+dist(p,n)C\leftarrow C-dist(p,x)-dist(x,n)+dist(p,n)C←C−dist(p,x)−dist(x,n)+

집합의 크기가 000 또는 111인 경우에는 C=0C=0C=0으로 처리하면 된다.

거리 dist(u,v)dist(u,v)dist(u,v)는 LCA 전처리로 구한다. 루트에서 정점 vvv까지의 거리를 D[v]D[v]D[v]라고 하면 다음 식을 사용한다.

dist(u,v)=D[u]+D[v]−2D[lca(u,v)]dist(u,v)=D[u]+D[v]-2D[lca(u,v)]dist(u,v)=D[u]+D[v]−2D[lc

LCA 전처리에 O(Nlog⁡N)O(N\log N)O(NlogN) 시간이 걸린다. 각 사건마다 ordered set 연산과 LCA 거리 계산을 상수 번 수행하므로 O(log⁡N)O(\log N)O(logN) 시간에 처리된다. 전체 시간복잡도는 O((N+Q)log⁡N)O((N+Q)\log N)O((N+이고, 메모리복잡도는 이다.

Solution written by GPT5.5

i​
,
vi+1​
)
e
TST_STS​
C(S)C(S)C(S)
eee
C(S)=2∑e∈TSw(e)C(S)=2\sum_{e\in T_S}w(e)C(S)=2∑e∈TS​​w(e)
C(S)/2C(S)/2C(S)/2
nn
n
dist(p,n)dist(p,n)dist(p,n)
xxx
dist(p,x)dist(p,x)dist(p,x)
dist(x,n)dist(x,n)dist(x,n)
dist(p,n)
dist(p,n)
a
(
u
,
v
)]
Q
)
log
N
)
O(Nlog⁡N)O(N\log N)O(NlogN)