DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

SON OF SUN

문제로 돌아가기

해설

aia_iai​의 깊이를 did_idi​라고 하자. 한 사람의 기운은 자신과 모든 조상의 가문 합에 한 번씩 포함된다. 모든 기운의 합이 000이므로 구하려는 전체 합은

∑i=02Ns(i)=∑i=1Ni(d2i−1−d2i)\sum_{i=0}^{2N}s(i)=\sum_{i=1}^{N}i(d_{2i-1}-d_{2i})i=0∑2N​s(i)=

이다.

작은 NNN의 정확한 판정. a1,…,aja_1,\ldots,a_ja1​,…,aj​를 처리했을 때, 현재 최대 깊이가 hh이고 가중 깊이 합이 인 상태의 도달 가능성을 저장한다. 다음 정점의 깊이는 이상 이하에서 자유롭게 고를 수 있다. 깊이를 로 고르면 최대 깊이는 가 되고, 합에는 다음 정점의 기운과 의 곱을 더한다. 인 모든 경우를 미리 계산한다.

최솟값과 최댓값. 다음 함수를 정의한다.

FN(t)=2N3+3tN2+3tN−2N−5t3−6t2−t6,BN(t)=FN(t)+t(t+1).F_N(t)=\frac{2N^3+3tN^2+3tN-2N-5t^3-6t^2-t}{6},\qquad B_N(t)=F_N(t)+t(t+1).FN​(t)=

가능한 전체 합의 최솟값 LNL_NLN​과 최댓값 RNR_NRN​은

LN=−max⁡0≤t≤NBN(t),RN=max⁡0≤t≤NFN(t)L_N=-\max_{0\leq t\leq N} B_N(t),\qquad R_N=\max_{0\leq t\leq N} F_N(t)LN​=−0≤t≤N

이다. FNF_NFN​과 BNB_NBN​은 정수 구간에서 오목하다. 인접한 두 값의 대소를 비교하는 이분 탐색으로 각 최댓값을 구할 수 있다. 최댓값을 만드는 가장 작은 인덱스를 각각 p,qp,qp,q라고 하자. 동률이면 반드시 가장 작은 인덱스를 선택한다.

큰 NNN의 정확한 판정. N≥13N\geq13N≥13에서는 다음 도달 가능성 분류를 사용한다.

  • k<LNk<L_Nk<LN​ 또는 k>RNk>R_Nk>RN​이면 만들 수 없다.
  • 이면 가 중 하나일 때에만 만들 수 있다.

작은 NNN에는 이 분류를 그대로 적용하지 않으며, 앞의 정확한 DP로 판정한다.

N≤12N\leq12N≤12의 고정된 전처리 이후, 한 테스트 케이스의 시간 복잡도는 O(log⁡N)O(\log N)O(logN)이고 추가 공간 복잡도는 O(1)O(1)O(1)이다. 범위 판정 부분점수만 목표로 한다면 두 극값을 구한 뒤 LN≤k≤RNL_N\leq k\leq R_N인지 비교하면 된다.

정당성 증명

최대 깊이가 hhh인 가계도에는 깊이 0,1,…,h0,1,\ldots,h0,1,…,h인 정점이 모두 존재한다. 따라서 다음 정점의 깊이는 정확히 1,…,h+11,\ldots,h+11,…,h+1 중에서 고를 수 있다. 이것으로 작은 의 DP 전이가 정당화된다. 새 정점이 당시 최대 깊이보다 한 칸 깊을 때 그 정점을 이라고 부르자. 또한

Solution written by GPT6

i=1
∑
N
​
i
(
d2i−1​
−
d2i​)
h
xxx
111
h+1h+1h+1
ddd
max⁡(h,d)\max(h,d)max(h,d)
ddd
N≤12N\leq12N≤12
62N3+3tN2+3tN−2N−5t3−6t2−t​
,
BN​
(
t
)
=
FN​(t)+
t(t+
1).
max
​
BN​
(
t
)
,
RN​
=
0≤t≤Nmax​FN​(t)
RN−k<p+1R_N-k<p+1
RN​−k<p+1
kkk
FN(p−1),FN(p),FN(p+1)F_N(p-1),F_N(p),F_N(p+1)FN​(p−1),FN​(p),FN​(p+1)
  • k−LN<q+1k-L_N<q+1k−LN​<q+1이면 −k-k−k가 BN(q−1),BN(q),BN(q+1)B_N(q-1),B_N(q),B_N(q+1)BN​(q−1),BN​(q),BN​(q+ 중 하나일 때에만 만들 수 있다.
  • 나머지 구간의 모든 정수는 만들 수 있다.
  • L
    N​
    ≤
    k≤
    RN​
    NN
    N
    기록 정점
    S(x)=x(x+1)2,Q=∑i=1Ni(i−1)S(x)=\frac{x(x+1)}2,\qquad Q=\sum_{i=1}^{N}i(i-1)S(x)=2x(x+1)​,Q=i=1∑N​i(i−1)

    로 둔다.

    기록 집합별 상한. 양의 방향을 먼저 보자. 음의 기운을 가진 기록 정점의 인덱스 집합을 R={b1<⋯<bt}\mathcal R=\{b_1<\cdots<b_t\}R={b1​<⋯<bt​}로 고정한다. 기록이 아닌 음의 정점은 깊이 111, 기록이 아닌 양의 정점은 당시 최대 깊이에 두는 것이 최적이다. 이 상태에서 양의 정점 iii를 기록으로 바꾸는 이득은

    i 1i∉R+∑j>i, j∉Rj≥0i\,\mathbf{1}_{i\notin\mathcal R}+\sum_{j>i,\,j\notin\mathcal R}j\geq0i1i∈/R​+j>i,j∈/R∑​j≥0

    이다. i∈Ri\in\mathcal Ri∈R이면 같은 쌍의 음의 기록 정점도 한 칸 깊어져 자기 항 iii가 상쇄된다. 따라서 모든 양의 정점이 기록인 최적 구성이 존재한다. 그 값은

    Q+∑r=1tfr(br),fr(x)=S(N)−3x2+(2r−1)x2Q+\sum_{r=1}^{t}f_r(b_r),\qquad f_r(x)=S(N)-\frac{3x^2+(2r-1)x}{2}Q+r=1∑t​fr​(br​),fr​(x)=S(N)−23x2+(2r−1)x​

    이다. br≥rb_r\geq rbr​≥r이고 fr(x)−fr(x+1)=3x+r+1>0f_r(x)-f_r(x+1)=3x+r+1>0fr​(x)−fr​(x+1)=3x+r+1>0이므로, 이 값은 R={1,…,t}\mathcal R=\{1,\ldots,t\}R={1,…,t}에서의 FN(t)F_N(t)FN​(t) 이하이다. 초기 구간이 아닌 집합이면 bt≥t+1b_t\geq t+1bt​≥t+1이므로 FN(t)F_N(t)FN​(t)보다 적어도 4t+14t+14t+1 작다.

    초기 구간이고 t<Nt<Nt<N일 때, 양의 정점의 기록을 하나라도 생략하면 손실은 적어도 t+1t+1t+1이다. i>ti>ti>t이면 자기 항 i≥t+1i\geq t+1i≥t+1이 남고, i≤ti\leq ti≤t이면 위 합에 j=N∉Rj=N\notin\mathcal Rj=N∈/R이 포함되기 때문이다. 기록이 아닌 음의 정점의 깊이를 111보다 늘리는 손실도 그 인덱스가 ttt보다 크므로 적어도 t+1t+1t+1이다. 따라서 이 기록 집합에서 최댓값과 다른 값은 모두 FN(t)−t−1F_N(t)-t-1FN​(t)−t−1 이하이다.

    음의 방향은 전체 값의 부호를 바꾸어 분석한다. 이번에는 원래 양의 정점 중 기록인 집합을 고정한다. 기록이 아닌 양의 정점은 깊이 111로 두고, 모든 음의 정점이 기록인 구성이 최적이다. 음의 정점 iii를 기록으로 바꾸는 이득은 i+∑j>i, j∉Rj>0i+\sum_{j>i,\,j\notin\mathcal R}j>0i+∑j>i,j∈/R​j>0이고, 최댓값은

    Q+∑r=1tgr(br),gr(x)=S(N)−3x2+(2r−5)x2Q+\sum_{r=1}^{t}g_r(b_r),\qquad g_r(x)=S(N)-\frac{3x^2+(2r-5)x}{2}Q+r=1∑t​gr​(br​),gr​(x)=S(N)−23x2+(2r−5)x​

    이다. gr(x)−gr(x+1)=3x+r−1>0g_r(x)-g_r(x+1)=3x+r-1>0gr​(x)−gr​(x+1)=3x+r−1>0이므로 초기 구간에서 BN(t)B_N(t)BN​(t)를 얻고, 초기 구간이 아니면 적어도 4t−14t-14t−1의 손실이 생긴다. 초기 구간이며 t<Nt<Nt<N일 때, 기록을 생략하거나 비기록 정점의 깊이를 최적값에서 바꾸는 손실은 적어도 t+1t+1t+1이다. 첫 양의 정점은 반드시 기록이지만 BN(1)>BN(0)B_N(1)>B_N(0)BN​(1)>BN​(0)이므로 극값 계산에는 t=0t=0t=0도 포함해도 된다. 이것으로 두 극값 공식이 증명된다.

    두 가지 직접 구성. 처음 ttt쌍의 깊이를 2i−1,2i2i-1,2i2i−1,2i로 정한다. 이후 i>ti>ti>t에 대해 양의 정점의 깊이를 i+ti+ti+t로 고정하고 음의 정점의 깊이를 1+bi1+b_i1+bi​로 정하면

    FN(t)−∑i=t+1Nibi,0≤bi≤i+t−1F_N(t)-\sum_{i=t+1}^{N}i b_i,\qquad 0\leq b_i\leq i+t-1FN​(t)−i=t+1∑N​ibi​,0≤bi​≤i+t−1

    를 만든다. 반대로 음의 정점의 깊이를 i+ti+ti+t, 양의 정점의 깊이를 1+bi1+b_i1+bi​로 정하면

    −BN(t)+∑i=t+1Nibi-B_N(t)+\sum_{i=t+1}^{N}i b_i−BN​(t)+i=t+1∑N​ibi​

    를 만든다. 후자에서 양의 정점이 먼저 깊이 i+ti+ti+t에 도달하더라도, 음의 정점은 이미 존재하는 깊이 i+t−1i+t-1i+t−1의 정점을 부모로 골라 같은 깊이에 둘 수 있다. 따라서 모든 bib_ibi​ 선택이 유효하다.

    동전 합의 구간. t≥1t\geq1t≥1, N≥2t+1N\geq2t+1N≥2t+1이라 하자. 값 iii인 동전을 i+t−1i+t-1i+t−1개씩 가지며, a=t+1a=t+1a=t+1, 전체 동전 수를 CCC, 전체 합을 WWW라고 하자. 이 동전들의 부분집합 합은 정확히

    {0} ∪ [a,W−a] ∪ {W}\{0\}\ \cup\ [a,W-a]\ \cup\ \{W\}{0} ∪ [a,W−a] ∪ {W}

    이다. 정확히 qqq개를 고른 합은 가장 작은 qqq개의 합 AqA_qAq​부터 가장 큰 qqq개의 합 ZqZ_qZq​까지의 모든 정수를 채운다. 정렬된 동전에서 선택한 인덱스를 한 칸씩 옮겨 가장 작은 선택을 가장 큰 선택으로 바꿀 수 있고, 인접한 동전 값의 차이가 000 또는 111이기 때문이다.

    q=1,…,C−2q=1,\ldots,C-2q=1,…,C−2에서 이웃한 두 구간이 이어짐을 보이면 된다. Zq=W−AC−qZ_q=W-A_{C-q}Zq​=W−AC−q​이므로 그 사이의 차이는

    Dq=Aq+1−Zq=Aq+1+AC−q−WD_q=A_{q+1}-Z_q=A_{q+1}+A_{C-q}-WDq​=Aq+1​−Zq​=Aq+1​+AC−q​−W

    이다. 정렬된 동전을 c1≤⋯≤cCc_1\leq\cdots\leq c_Cc1​≤⋯≤cC​라 하면 Dq+1−Dq=cq+2−cC−qD_{q+1}-D_q=c_{q+2}-c_{C-q}Dq+1​−Dq​=cq+2​−이므로 DqD_qDq​는 가운데까지 감소하고 이후 증가한다. 최댓값은 양 끝에서 나오며, 최소 동전 aaa가 적어도 두 개 있으므로 그 값은 2a−N≤12a-N\leq12a−N≤1이다. 따라서 q=1,…,C−1q=1,\ldots,C-1q=1,…,C−1의 구간은 [a,W−a][a,W-a][a,W−a] 전체를 채운다. 나머지 두 합은 아무것도 고르지 않거나 모두 고르면 되고, 최소 동전이 aaa이므로 다른 바깥 합은 불가능하다.

    큰 NNN에서 내부 구간의 완전성. 차분은

    ΔFt=FN(t+1)−FN(t)=N(N+1)−(t+1)(5t+4)2,\Delta F_t=F_N(t+1)-F_N(t)=\frac{N(N+1)-(t+1)(5t+4)}2,ΔFt​=FN​(t+1)−FN​(t)=2N(N+1)−(t+1)(5t+4)​,
    ΔBt=BN(t+1)−BN(t)=N(N+1)−5t(t+1)2\Delta B_t=B_N(t+1)-B_N(t)=\frac{N(N+1)-5t(t+1)}2ΔBt​=BN​(t+1)−BN​(t)=2N(N+1)−5t(t+1)​

    이고 감소한다. N≥13N\geq13N≥13이면 첫 최대 인덱스 p,qp,qp,q는 p,q≥2p,q\geq2p,q≥2 및 N≥2p+1,2q+1N\geq2p+1,2q+1N≥2p+1,2q+1을 만족한다. 실제로 N=2sN=2sN=2s에서 ΔBs−1=s(7−s)/2≤0\Delta B_{s-1}=s(7-s)/2\leq0ΔBs−1​=s(7−s)/2≤0이고, N=2s+1N=2s+1N=2s+1에서 ΔBs=−(s−2)(s+1)/2≤0\Delta B_s=-(s-2)(s+1)/2\leq0ΔBs​=−(s−2)(s+1)/2≤0이다. 또한 ΔFt<ΔBt\Delta F_t<\Delta B_tΔFt​<ΔBt​이다.

    첫 구성에서 t=pt=pt=p에 동전 보조정리를 적용하면

    [−S(p)+p+1, RN−p−1][-S(p)+p+1,\ R_N-p-1][−S(p)+p+1, RN​−p−1]

    을 채운다. 왼쪽 끝은 111 이하이므로 양의 내부 구간이 모두 가능하다. 둘째 구성의 t=qt=qt=q는

    [LN+q+1, −S(q)−q−1][L_N+q+1,\ -S(q)-q-1][LN​+q+1, −S(q)−q−1]

    을 채운다. 한편 모든 양의 정점을 깊이 111에 두고 음의 정점을 각각 깊이 111 또는 222에 두면 [−S(N),0][-S(N),0][−S(N),0]의 모든 정수를 만든다. 두 구간은 서로 겹치므로 음의 내부 구간도 모두 가능하다. 따라서

    [LN+q+1, RN−p−1][L_N+q+1,\ R_N-p-1][LN​+q+1, RN​−p−1]

    의 모든 정수가 가능하다.

    양 끝에서 남는 세 후보. 위쪽 경계 [RN−p,RN][R_N-p,R_N][RN​−p,RN​]를 보자. 인접 차분의 차이는 ΔFt−ΔFt−1=−(5t+2)\Delta F_t-\Delta F_{t-1}=-(5t+2)ΔFt​−ΔFt−1​=−(5t+2)이다. ppp가 첫 최대 인덱스이므로 ΔFp−1>0\Delta F_{p-1}>0ΔFp−1​>0, ΔFp≤0\Delta F_p\leq0ΔFp​≤0이고, 따라서

    FN(p)−FN(p−2)>5(p−1)+2>p,F_N(p)-F_N(p-2)>5(p-1)+2>p,FN​(p)−FN​(p−2)>5(p−1)+2>p,
    FN(p)−FN(p+2)≥5(p+1)+2>p.F_N(p)-F_N(p+2)\geq5(p+1)+2>p.FN​(p)−FN​(p+2)≥5(p+1)+2>p.

    기록 정점 수 ttt가 p−1,p,p+1p-1,p,p+1p−1,p,p+1 밖에 있으면 그 기록 수의 상한부터 경계 밖이다. 이 세 경우에도 초기 구간이 아닌 기록 집합은 적어도 4t+1>p4t+1>p4t+1>p를 잃어 경계에 들어오지 못한다. 초기 구간의 다른 구성은 t+1t+1t+1 이상을 잃는다. t=p−1t=p-1t=p−1이면 FN(t)<RNF_N(t)<R_NFN​(t)<RN​이므로 남은 손실 여유는 p−1=tp-1=tp−1=t 이하이고, 나머지 두 경우에도 여유는 ttt 이하이다. 따라서 경계에서 가능한 값은 세 최적값 FN(p−1),FN(p),FN(p+1)F_N(p-1),F_N(p),F_N(p+1)FN​(p−1),FN​(p),F뿐이며, 앞의 직접 구성으로 실제로 만들 수 있다.

    아래쪽도 ΔBt−ΔBt−1=−5t\Delta B_t-\Delta B_{t-1}=-5tΔBt​−ΔBt−1​=−5t와 ppp 대신 qqq를 써서 같다. 이때 두 칸 떨어진 값의 손해는 각각 5(q−1)5(q-1)5(q−1)보다 크거나 5(q+1)5(q+1)5(q+1) 이상이며, 모두 qqq보다 크다. 초기 구간이 아닌 집합의 손해도 4t−1>q4t-1>q4t−1>q이므로, 경계에서 가능한 값은 −BN(q−1),−BN(q),−BN(q+1)-B_N(q-1),-B_N(q),-B_N(q+1)−BN​(q−1),−BN​(q뿐이다. 이것으로 N≥13N\geq13N≥13의 판정 분류가 완전히 증명된다.

    1)
    cC−q​
    N​
    (
    p
    +
    1)
    )
    ,
    −
    BN​
    (
    q
    +
    1)