Description Coco has a tree, whose vertices are conveniently labeled by 1,2,…,n. There are m chain on the tree, Each chain has a certain weight. Coco would like to pick out some chains any two of which do not share common vertices. Find out the maximum sum of the weight Coco can pick 제목: N 개의 점 을 주 는 나무, M 개의 나무 사슬, 나무 사슬 은 권리 가 있 습 니 다. 꺼 낸 나무 사슬 이 서로 교차 하지 않 는 상황 에서 가중치 와 최대 가 얼마 인지 물 어보 세 요. 해법: 이렇게 고려 할 수 있 습 니 다. 만약 에 어떤 점 이 X, Y 의 LCA 로 서 이 체인 을 취하 면 그 서브 트 리 의 해 는 최대 얼마 입 니까? DP [x] 를 설정 하면 x 를 뿌리 로 하 는 하위 트 리 에서 이 점 을 lca 로 하 는 체인 을 제거 한 후 얻 을 수 있 는 최대 치 를 표시 합 니 다.그러면 알 수 있 듯 이 특정한 체인 을 가 져 온 후에 (이 체인 의 lca 는 x) 얻 을 수 있 는 최대 치 는?Σ DP [{son}] + W 그 중 {son} 은 이 체인 의 아들 집합 (체인 자 체 를 포함 하지 않 음) 입 니 다. dfs 에서 특정한 점 x 까지 x 점 을 lca 로 하 는 모든 체인 을 처리 하고 모든 체인 에서 얻 을 수 있 는 값 의 최대 치 를 계산 하여 dp [X] 에 할당 할 수 있 습 니 다. 그럼 어떻게 구 해 요?Σ DP[{son}] ? 우 리 는 이렇게 처리 할 수 있다. 매번 dp [X] 를 구 할 때마다 - dp [X] 를 X 점 에 추가 하 는 VAL [], + dp [X] 를 X 점 에 추가 하 는 아버지의 VAL [] 을 구 할 수 있다. 그러면Σ VAL [체인 의 점] 이 바로 원 하 는 답 입 니 다.분명 한 것 은 체인 상의 점 권 과 트 리 체인 으로 나 눌 수 있 는 + 선분 트 리 로 쓸 수 있 고 복잡 도 는 N * logN * logN 이다.(실제로 이 문 제 는 수정 되 지 않 았 기 때문에 DFS 순서 + 트 리 배열 로 O (N * logN) 를 빠르게 처리 할 수 있 습 니 다) 코드: (ZKW 선분 트 리 1200 + MS)