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

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

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

탐사 기록

문제로 돌아가기

해설

트리를 111번 정점을 루트로 두고, dvd_vdv​를 정점 vvv의 깊이, pv=dv mod 2p_v=d_v\bmod 2pv​=dv​mod2라 하자.

로봇이 uuu에서 출발할 때의 배터리가 CCC이고 경로 위의 정점 xxx에 도착했다면, 그때의 배터리는

C+Hu−HxC+H_u-H_xC+Hu​−Hx​

이다. 따라서 uuu와 vvv 사이 경로의 최대 높이를 Hmax⁡H_{\max}Hmax​라 하면

A(u,v)=Hmax⁡−Hu,B(u,v)=Hmax⁡−HvA(u,v)=H_{\max}-H_u,\qquad B(u,v)=H_{\max}-H_vA(u,v)=Hmax​−H

이고, Z(u,v)Z(u,v)Z(u,v)는 uuu에서 vvv로 이동하는 순서에서 높이 Hmax⁡H_{\max}Hmax​를 처음 갖는 정점이다.

간선을 지날 때 높이가 정확히 111 변하고 H1=0H_1=0H1​=0이므로

Hv≡dv(mod2)H_v\equiv d_v\pmod 2Hv​≡dv​(mod2)

이다. 다음 정수 변수를 정의하자.

Kv=Hv−pv2.K_v=\frac{H_v-p_v}{2}.Kv​=2Hv​−

그러면 Hv=2Kv+pvH_v=2K_v+p_vHv​=2Kv​+pv​이고 이다.

부모가 qqq, 자식이 ccc인 간선은 다음 두 차분 제약과 동치이다.

Kc−Kq≤pq,Kq−Kc≤1−pq.K_c-K_q\le p_q,\qquad K_q-K_c\le1-p_q.Kc​−Kq​≤p

기록 (u,v,a,b,z)(u,v,a,b,z)(u,v,a,b,z)를 생각하자. 먼저 zzz가 uuu와 vvv 사이 경로 위에 있어야 한다.

Hz−Hu=aH_z-H_u=aHz​−Hu​=a, Hz−Hv=bH_z-H_v=bH이므로

2(Kz−Ku)=a+pu−pz,2(K_z-K_u)=a+p_u-p_z,2(Kz​−Ku​)=a+ 2(Kz−Kv)=b+pv−pz.2(K_z-K_v)=b+p_v-p_z.2(Kz​−Kv​)=b+

오른쪽 값이 홀수이면 모순이다. 그렇지 않으면 두 등식을 각각 서로 반대 방향의 두 차분 제약으로 추가할 수 있다.

uuu에서 zzz에 도착하기 전의 정점 xxx에서는 zzz보다 먼저 배터리가 000이 되면 안 되므로 Hx<HzH_x<H_zH여야 한다. 따라서

Kx−Kz≤{−1pz=0,0pz=1, px=0,−1pz=1, px=1.K_x-K_z\le \begin{cases} -1 & p_z=0,\\ 0 & p_z=1,\ p_x=0,\\ -1 & p_z=1,\ p_x=1. \end{cases}Kx​−

이다.

zzz를 지난 뒤의 정점 xxx에서는 Hx≤HzH_x\le H_zHx​≤Hz​이면 된다. 따라서

Kx−Kz≤{0pz=0, px=0,−1pz=0, px=1,0pz=1.K_x-K_z\le \begin{cases} 0 & p_z=0,\ p_x=0,\\ -1 & p_z=0,\ p_x=1,\\ 0 & p_z=1. \end{cases}Kx​−

이다.

보조 변수 X0X_0X0​을 두고 Kv=Xv−X0K_v=X_v-X_0Kv​=X으로 해석한다. 은 , 은 과 으로 표현한다. 이제 모든 조건은

Xy−Xx≤cX_y-X_x\le cXy​−Xx​≤c

꼴의 차분 제약이다.

문제는 기록 하나가 경로 위의 많은 정점에 제약을 만든다는 점이다. 이를 정점마다 직접 추가하면 제약 수가 O(NM)O(NM)O(NM)이 된다. Bellman-Ford까지 그대로 수행하면 충분히 빠르지 않다.

Bellman-Ford를 동기식으로 생각하자. 현재 거리를 DDD, 다음 라운드의 거리를 D′D'D′라 하면, 처음에 D′=DD'=DD′=D로 둔 뒤 모든 제약 x→에 대해

Dy′←min⁡(Dy′,Dx+c)D'_y\leftarrow\min(D'_y,D_x+c)Dy′​←min(Dy′​

를 수행한다. 실제 변수는 0,1,⋯ ,N0,1,\cdots,N0,1,⋯,N뿐이므로 총 N+1N+1N+1번의 라운드만 확인하면 된다.

기록에서 생기는 경로 제약은 모두 어떤 정점 zzz에서 경로 위 정점들로 향한다. 가중치는 도착 정점의 깊이 짝홀에만 의존한다. 따라서 하나의 경로 제약을 두 값 (C0,C1)(C_0,C_1)(C0​,C1​)로 나타낼 수 있다. 깊이가 짝수인 정점 xxx에는 , 홀수인 정점에는 을 후보로 준다.

한 라운드에서 이러한 경로 relax를 HLD로 한꺼번에 처리한다.

HLD의 한 체인에 속한 정점들은 체인의 머리부터 아래쪽 순서로 연속하게 놓인다. 일반적인 트리 경로를 HLD로 분해하면 O(log⁡N)O(\log N)O(logN)개의 완전한 체인 prefix

[head⁡(x),x][\operatorname{head}(x),x][head(x),x]

와 마지막 한 체인 안의 구간 하나로 나타낼 수 있다.

완전한 체인 prefix에는 세그먼트 트리 갱신을 하지 않는다. 그 prefix의 끝점 xxx에 (C0,C1)(C_0,C_1)(C0​,C1​)을 저장한다. 모든 기록을 처리한 뒤 각 체인을 아래에서 위로 한 번 훑으면서 지금까지 본 값의 최솟값을 유지하면, 모든 prefix 갱신을 O(N)O(N)에 각 정점으로 전파할 수 있다. prefix 갱신 하나의 비용은 이다.

마지막 한 체인 안의 일반 구간만 lazy 세그먼트 트리에 range chmin을 한다. 각 세그먼트 트리 노드에도 깊이 짝홀용 두 최솟값을 저장한다. 갱신 하나는 O(log⁡N)O(\log N)O(logN)이고, 모든 갱신이 끝난 뒤 태그를 리프까지 한 번 전파하면 O(N)O(N)O(N)에 모든 정점의 후보를 얻는다.

따라서 트리 경로 하나의 relax는 HLD에서 체인을 건너는 횟수 O(log⁡N)O(\log N)O(logN)과 마지막 구간 갱신 O(log⁡N)O(\log N)O(logN)을 합쳐 O(log⁡N)O(\log N)O(logN)에 처리된다. 한 기록에서 필요한 경로는 zz 이전과 이후 두 개뿐이다. 를 제외한 각 경로의 끝점은 LCA와 binary lifting으로 미리 구할 수 있다.

한 Bellman-Ford 라운드의 비용은 다음과 같다.

  • 간선 조건, 비음수 조건, 기록의 등식 조건: O(N+M)O(N+M)O(N+M).
  • 기록의 경로 조건: O(Mlog⁡N)O(M\log N)O(MlogN).
  • HLD prefix와 세그먼트 트리 태그를 실제 정점으로 전파: O(N)O(N)O(N).

따라서 전체 시간 복잡도는

O(N(N+Mlog⁡N))O\left(N(N+M\log N)\right)O(N(N+MlogN))

이고, binary lifting을 포함한 메모리 복잡도는 O(Nlog⁡N+M)O(N\log N+M)O(NlogN+M)이다.

초기 거리를 모두 000으로 두면 모든 변수로 가중치 000의 간선을 갖는 슈퍼 소스를 둔 것과 같다. N+1N+1N+1번째 라운드에서도 값이 감소한다면 음수 사이클이 존재하므로 답은 없다. 그 전에 더 이상 감소하지 않으면 최종 거리 DDD에 대해

Kv=Dv−D0,Hv=2Kv+pvK_v=D_v-D_0,\qquad H_v=2K_v+p_vKv​=Dv​−D

로 높이를 복원한다.

증명

배터리가 C+Hu−HxC+H_u-H_xC+Hu​−Hx​라는 식에서, 이동 중 배터리가 음수가 되지 않기 위한 최소 CC는 경로 최대 높이와 의 차이다. 이 최소 배터리로 배터리가 인 정점은 정확히 경로 최대 높이를 갖는 정점이다. 따라서 기록은 에서의 두 높이 차 등식, 이전의 엄격한 상한, 이후의 일반 상한과 정확히 동치이다.

Solution written by GPT5.6

u
​
,
B
(
u
,
v
)
=
Hmax​−
Hv​
pv​
​
.
Kv≥0K_v\ge0Kv​≥0
q
​
,
Kq​
−
Kc​≤
1−
pq​.
z​
−
Hv​=
b
pu​
−
pz​,
pv​
−
pz​.
x
​
<
Hz​
Kz​
≤
⎩⎨⎧​−10−1​pz​=0,pz​=1, px​=0,pz​=1, px​=1.​
K
z​
≤
⎩⎨⎧​0−10​pz​=0, px​=0,pz​=0, px​=1,pz​=1.​
v
​
−
X0​
Kv≥0K_v\ge0Kv​≥0
X0−Xv≤0X_0-X_v\le0X0​−Xv​≤0
K1=0K_1=0K1​=0
X1−X0≤0X_1-X_0\le0X1​−X0​≤0
X0−X1≤0X_0-X_1\le0X0​−X1​≤0
yx\to y
x→y
,
Dx​
+
c)
Dz+C0D_z+C_0Dz​+C0​
Dz+C1D_z+C_1Dz​+C1​
O
(
N
)
O(1)O(1)O(1)
z
zzz
zzz
0
​
,
Hv​
=
2Kv​+
pv​
C
HuH_uHu​
000
zzz
zzz
zzz

깊이와 높이의 짝홀이 같으므로 모든 유효한 높이는 정수 KvK_vKv​로 유일하게 표현된다. 반대로 간선에 대한 두 차분 제약을 만족하는 KKK에서 Hv=2Kv+pvH_v=2K_v+p_vHv​=2Kv​+pv​를 만들면 부모와 자식의 높이 차는 정확히 111이다. Kv≥0K_v\ge0Kv​≥0과 K1=0K_1=0K1​=0도 각각 높이의 비음수성과 H1=0H_1=0H1​=0을 보장한다.

한 동기식 Bellman-Ford 라운드에서 경로 제약 z→xz\to xz→x가 만드는 후보는 이전 라운드의 DzD_zDz​와 해당 간선 가중치의 합이다. HLD 자료구조는 이 후보들의 최솟값을 경로에 포함된 정점에만 전달한다. 완전한 체인 prefix를 아래에서 위로 전파하는 과정은 각 prefix가 덮는 모든 정점에 정확히 같은 값을 전달하며, 마지막 체인 구간의 세그먼트 트리 range chmin도 같은 동작을 한다. 따라서 압축된 한 라운드의 결과는 모든 경로 간선을 실제로 나열하여 완화한 결과와 완전히 같다.

결국 알고리즘은 원래 차분 제약 그래프에 대한 동기식 Bellman-Ford와 동일하다. 차분 제약이 만족 가능할 필요충분조건은 음수 사이클이 없는 것이다. 음수 사이클이 없으면 안정된 거리 DDD가 모든 제약을 만족하며, Dv−D0D_v-D_0Dv​−D0​으로 평행 이동하여 얻은 KvK_vKv​와 복원한 HvH_vHv​가 모든 원래 조건을 만족한다.