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

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

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

All Falls Down

문제로 돌아가기

해설

각 정점 vvv에 정수 r(v)r(v)r(v)를 다음과 같이 정의한다.

  • vvv가 잎이면 r(v)=0r(v)=0r(v)=0이다.
  • r(c)r(c)r(c)가 짝수인 자식 ccc가 있다면, 그 값의 최솟값에 111을 더한다.
  • 그렇지 않다면, 모든 자식의 r(c)r(c)r(c) 중 최댓값에 111을 더한다.

이 값은 자식의 값을 모두 구한 뒤 아래에서 위로 계산할 수 있다. r(v)r(v)r(v)가 양의 짝수이면 모든 자식의 값은 홀수이며 그 최댓값은 r(v)−1r(v)-1r(v)−1이다. r(v)r(v)r(v)가 홀수이면 값이 r(v)−1r(v)-1인 짝수 자식이 존재하고, 모든 짝수 자식의 값은 이상이다.

현재 말이 u,vu,vu,v에 있고 턴을 진행할 사람이 패배하는 조건은 min⁡(r(u),r(v))\min(r(u),r(v))min(r(u),r(v))가 짝수인 것이다. 말이 자식으로 내려갈 때마다 이 명제를 귀납적으로 증명할 수 있다.

min⁡(r(u),r(v))=k\min(r(u),r(v))=kmin(r(u),r(v))=k가 짝수라고 하자. k=0k=0k=0이면 이동할 수 없는 말이 있다. k>0k>0k>이면 값이 인 말의 모든 자식은 값이 보다 작은 홀수이다. 다른 말의 자식 값이 짝수라면 그 값은 이상이고, 홀수라면 두 자식 값의 최솟값은 여전히 홀수이다. 따라서 모든 이동은 상대가 이기는 상태로 간다.

반대로 kkk가 홀수라면, 값이 kkk인 말은 값이 k−1k-1k−1인 짝수 자식으로 이동할 수 있다. 다른 말의 값이 홀수라면 값이 k−1k-1k−1 이상인 짝수 자식을 고를 수 있다. 다른 말의 값이 짝수라면 값이 kkk 이상인 홀수 자식을 고를 수 있다. 따라서 두 자식 값의 최솟값이 짝수인 상태로 이동할 수 있다.

Alice가 쌍을 고른 직후 Bob이 먼저 이동하므로, 구하는 쌍은 min⁡(r(u),r(v))\min(r(u),r(v))min(r(u),r(v))가 짝수인 쌍이다. 각 rrr값의 빈도를 세고 큰 값부터 내려오며, 현재 값이 짝수일 때 같은 값을 가진 정점 쌍과 더 큰 값을 가진 정점과의 쌍을 더한다. 답은 646464비트 정수에 저장한다.

한 케이스의 시간 복잡도와 공간 복잡도는 모두 O(N)O(N)O(N)이다.

Solution written by GPT6

r
(
v
)
−
1
r(v)−1r(v)-1r(v)−1
0
kkk
kkk
kkk