DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Round-Robin Tree

問題に戻る

解説

정점 vvv를 루트로 하는 서브트리에 공을 kkk개 넣었을 때 얻을 수 있는 최댓값을 Fv(k)F_v(k)Fv​(k)라 하자.

먼저 자식이 하나인 정점을 처리한다. 정점 vvv의 자식이 uuu 하나뿐이라면 모든 공이 반드시 uuu로 이동하므로

Fv(k)=Fu(k)F_v(k)=F_u(k)Fv​(k)=Fu​(k)

이다. 따라서 자식이 하나인 정점들을 모두 압축해도 공의 분배와 점수는 변하지 않는다. 루트부터 자식이 하나인 경로가 이어지는 경우에도 같은 방식으로 압축한다. 압축된 트리의 모든 정점은 리프이거나 자식이 적어도 두 개이다.

리프 vvv에서는 모든 공이 그 리프에서 멈추므로

Fv(k)=kCvF_v(k)=kC_vFv​(k)=kCv​

이다.

이제 자식이 ddd개인 정점 vvv를 생각하자. k=qd+rk=qd+rk=qd+r이고 0≤r<d0\le r<d0≤r라 하자. 자식 순서와 관계없이 모든 자식은 공을 개씩 받고, 순서의 앞 개 자식만 공을 하나 더 받는다.

자식 uuu가 추가 공을 하나 받을 때의 이득은

Du(q)=Fu(q+1)−Fu(q)D_u(q)=F_u(q+1)-F_u(q)Du​(q)=Fu​(q+1)

이다. 앞 rrr개 위치에는 어떤 rrr개의 자식도 놓을 수 있으므로, Du(q)D_u(q)Du​(q)가 큰 자식 rrr개를 고르는 것이 최적이다. 따라서

Fv(k)=∑uFu(q)+Du(q) 중 큰 값 r개의 합F_v(k)=\sum_{u}F_u(q)+\text{$D_u(q)$ 중 큰 값 $r$개의 합}Fv​(k)=u∑​

을 얻는다.

같은 qqq에 대해 k=qd,qd+1,⋯ ,qd+d−1k=qd,qd+1,\cdots,qd+d-1k=qd,qd+1,⋯,qd+d−을 한꺼번에 계산할 수 있다. 모든 자식의 를 내림차순으로 정렬하고 누적합을 만들면 이 구간의 상태를 모두 계산할 수 있다.

모든 정점에서 000부터 XXX까지 계산하면 여전히 너무 느리다. 정점 vvv에 실제로 필요할 수 있는 공 개수의 최댓값을 KvK_vKv​라 하자. 압축된 루트에서는 Kroot=XK_{root}=X이다. 자식 수가 인 정점 의 자식 는 최대

Ku=⌈Kvd⌉K_u=\left\lceil\frac{K_v}{d}\right\rceilKu​=⌈dKv​

개의 공만 받을 수 있다. 따라서 Fu(0),Fu(1),⋯ ,Fu(Ku)F_u(0),F_u(1),\cdots,F_u(K_u)Fu​(0),Fu​(1),⋯,F만 계산하면 충분하다.

상태 수를 증명하자. Ev=Kv−1E_v=K_v-1Ev​=Kv​−1이라 두면 자식 uuu에 대해

Eu=⌊Evd⌋E_u=\left\lfloor\frac{E_v}{d}\right\rfloorEu​=⌊dEv​

이다. 압축된 트리에서는 d≥2d\ge2d≥2이므로 양수인 EvE_vEv​는 한 단계 내려갈 때마다 적어도 절반이 된다. 또한 한 정점의 자식들에 대한 EEE의 합은 부모의 EEE를 넘지 않는다. 따라서 같은 깊이의 모든 의 합은 이하이고, 양수인 가 존재할 수 있는 깊이는 개뿐이다. 인 정점은 정점마다 상수 개의 상태만 추가한다.

결과적으로 전체 DP 상태 수는

O(N+Xlog⁡X)O(N+X\log X)O(N+XlogX)

이다. 각 qqq마다 자식들의 이득을 정렬하므로 전체 시간 복잡도는

O((N+Xlog⁡X)log⁡N)O((N+X\log X)\log N)O((N+XlogX)logN)

이고, 메모리 복잡도는

O(N+Xlog⁡X)O(N+X\log X)O(N+XlogX)

이다.

점수는 음수일 수 있고 절댓값이 2⋅10142\cdot10^{14}2⋅1014까지 커질 수 있으므로 64비트 정수를 사용해야 한다.

Solution written by GPT5.6

<
d
qqq
rrr
−
Fu​(q)
F
u​
(
q
)
+
Du​(q) 중 큰 값 r개의 합
1
Du(q)D_u(q)Du​(q)
Kroot​=
X
ddd
vvv
uuu
​
⌉
u​
(
Ku​
)
​
⌋
EvE_v
Ev​
X−1X-1X−1
EvE_vEv​
O(log⁡X)O(\log X)O(logX)
Ev=0E_v=0Ev​=0