만드는 중입니다

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

선로 조립

시간 제한1초메모리 제한1024 MB

요약
트리에서 간선 하나를 끊은 뒤 두 정점 사이 어디에든 다시 이을 수 있을 때, 기차가 지나갈 수 있는 가장 긴 경로의 간선 수를 구합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 분할 정복
정답자
아직 제출이 없습니다

문제

모르고리즘 동방에는 기차 선로를 조립해 볼 수 있는 장난감이 있다. 민규는 11부터 NN까지 번호가 붙은 NN개의 기차역을 N−1N-1개의 선로로 연결했다. ii번째 선로는 uiu_i번 역과 viv_i번 역을 잇는다. 어떤 기차역에서든 선로를 따라 다른 기차역에 도달할 수 있다. 서로 다른 두 역 사이에는 선로가 최대 11개 있다.

민규는 다음 작업을 QQ번 반복한다.

  • jj번째 작업에서 pjp_j번 역과 qjq_j번 역을 잇는 선로를 뺀다.
  • 뺀 선로를 원하는 서로 다른 두 역 사이에 놓는다. 두 역이 이미 선로 하나 이상으로 연결되어 있으면 선로를 놓을 수 없다. 선로를 원래 있던 자리에 다시 놓는 것은 가능하다.
  • 새로 완성된 선로에서 원하는 출발 역과 도착 역을 하나씩 고른다. 기차를 출발 역에 놓고 도착 역까지 움직인다. 이때 한 번 지난 역은 다시 지날 수 없다.
  • 뺀 선로를 원래 자리로 되돌려 놓는다.

민규는 장난감을 오랫동안 갖고 놀고 싶어 한다. 그래서 각 작업에서 선로를 적절한 위치에 놓고, 출발 역과 도착 역을 적절히 골라 기차가 지나는 선로의 개수를 최대로 만들려고 한다. QQ개의 작업에서 뺀 선로가 주어질 때, 기차가 지나는 선로의 개수를 최대로 구하라.

입력

첫째 줄에 기차역의 개수 NN과 작업의 횟수 QQ가 공백으로 구분되어 주어진다.

이어서 N−1N-1줄에 걸쳐 선로의 정보가 주어진다. 각 줄에는 선로가 연결하는 두 역의 번호 uiu_i, viv_i가 공백으로 구분되어 주어진다.

이어서 QQ줄에 걸쳐 각 작업의 정보가 주어진다. 각 줄에는 뺄 선로가 연결하는 두 역의 번호 pjp_j, qjq_j가 공백으로 구분되어 주어진다.

출력

QQ줄에 걸쳐 각 작업마다 기차가 지나는 선로 개수의 최댓값을 한 줄에 하나씩 출력한다.

제한

  • 2≤N≤200 0002 \le N \le 200\,000
  • 1≤Q≤200 0001 \le Q \le 200\,000
  • 1≤ui<vi≤N1 \le u_i \lt v_i \le N
  • 1≤pj<qj≤N1 \le p_j \lt q_j \le N
  • pjp_j번 역과 qjq_j번 역을 잇는 선로는 존재한다.

힌트

실제 모르고리즘 동방에는 기차 장난감이 없다.

예제1

  1. 예제 1

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