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

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

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

Exploration Records

返回题目

题解

트리를 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​가 모든 원래 조건을 만족한다.