만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Adrian the Wonder Child

시간 제한2초메모리 제한2048 MB

요약
간선에 0 또는 1이 붙은 트리에서, 간선 라벨을 최대 m개까지 뒤집어 같은 라벨이 연속으로 k개를 넘지 않는 가장 긴 경로의 길이를 구합니다.
난이도

어려움10점 중 8점

유형
트리, 동적 계획법, 투 포인터
정답자
아직 제출이 없습니다

문제

Adrian the Wonder Child는 얼마 전 새 프로젝트의 코딩을 시작했다. 그는 매일 Git 저장소에 커밋을 정확히 하나씩 올렸고, 그 결과 저장소는 nn개의 정점으로 이루어진 트리가 되었다.

본문

Adi에게는 좋은 날과 나쁜 날이 있다. (보통 좋은 날 하루 뒤에 나쁜 날 열 날이 이어지지만, 이 사실은 이 문제에서 중요하지 않다.) 루트(첫 커밋)를 제외한 모든 정점에 대해, 그 정점과 부모를 잇는 간선에 00 또는 11 라벨을 붙인다. 나쁜 날에 올린 커밋이면 00, 좋은 날에 올린 커밋이면 11이다.

두 정점 사이의 경로에서 같은 값을 가진 연속된 간선이 최대 kk개이면, 그 경로를 kk-alternating이라고 한다. Adi는 어느 날이든 생각을 바꿀 수 있으며, 그러면 해당 커밋의 정점과 부모 사이 간선의 라벨이 뒤집힌다.

정수 mm과 kk가 주어졌을 때, 라벨을 최대 mm개의 간선에서 뒤집어 얻을 수 있는 가장 긴 kk-alternating 경로의 길이를 구하라.

입력

첫 줄에 세 정수 nn, kk, mm이 주어진다 (3≤n≤2⋅1053 \leq n \leq 2 \cdot 10^5, 2≤k<n2 \leq k < n, 0≤m<n0 \leq m < n).

다음 n−1n - 1개의 줄에는 세 정수 xx, yy, cc가 주어진다 (1≤x,y≤n1 \leq x, y \leq n, c∈{0,1}c \in \{0, 1\}). 이는 정점 xx와 yy 사이에 라벨이 cc인 간선이 있다는 뜻이다. 주어진 간선들은 트리를 이룬다.

출력

라벨을 최대 mm개의 간선에서 뒤집어 얻을 수 있는 가장 긴 kk-alternating 경로의 크기를 한 개의 정수로 출력한다.

예제1

  1. 예제 1

    입력
    9 3 2
    1 2 0
    2 3 1
    3 4 1
    4 5 1
    1 6 1
    1 7 0
    7 8 0
    8 9 1
    
    예상 출력
    7