Adrian the Wonder Child
시간 제한2초메모리 제한2048 MB
간선에 0 또는 1이 붙은 트리에서, 간선 라벨을 최대 m개까지 뒤집어 같은 라벨이 연속으로 k개를 넘지 않는 가장 긴 경로의 길이를 구합니다.
문제
Adrian the Wonder Child는 얼마 전 새 프로젝트의 코딩을 시작했다. 그는 매일 Git 저장소에 커밋을 정확히 하나씩 올렸고, 그 결과 저장소는 개의 정점으로 이루어진 트리가 되었다.
본문
Adi에게는 좋은 날과 나쁜 날이 있다. (보통 좋은 날 하루 뒤에 나쁜 날 열 날이 이어지지만, 이 사실은 이 문제에서 중요하지 않다.) 루트(첫 커밋)를 제외한 모든 정점에 대해, 그 정점과 부모를 잇는 간선에 또는 라벨을 붙인다. 나쁜 날에 올린 커밋이면 , 좋은 날에 올린 커밋이면 이다.
두 정점 사이의 경로에서 같은 값을 가진 연속된 간선이 최대 개이면, 그 경로를 -alternating이라고 한다. Adi는 어느 날이든 생각을 바꿀 수 있으며, 그러면 해당 커밋의 정점과 부모 사이 간선의 라벨이 뒤집힌다.
정수 과 가 주어졌을 때, 라벨을 최대 개의 간선에서 뒤집어 얻을 수 있는 가장 긴 -alternating 경로의 길이를 구하라.
입력
첫 줄에 세 정수 , , 이 주어진다 (, , ).
다음 개의 줄에는 세 정수 , , 가 주어진다 (, ). 이는 정점 와 사이에 라벨이 인 간선이 있다는 뜻이다. 주어진 간선들은 트리를 이룬다.
출력
라벨을 최대 개의 간선에서 뒤집어 얻을 수 있는 가장 긴 -alternating 경로의 크기를 한 개의 정수로 출력한다.