아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Unter

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

요약
집 N개와 도로 N개로 이루어진 연결 그래프에서 최대 100만 개의 최단 거리 질의에 답한다. 사이클이 정확히 하나 존재한다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 트리, 누적 합
정답자
아직 제출이 없습니다

문제

Justas는 사람들이 자동차 이동을 함께 나눌 수 있는 앱을 만들려고 합니다. 먼저 두 집 사이의 최단 거리를 찾는 프로그램을 작성해야 합니다.

앱이 동작할 도시에는 11번부터 NN번까지 번호가 매겨진 NN개의 집이 있습니다. 집들은 NN개의 양방향 도로로 직접 연결되어 있습니다. 각 도로는 정확히 두 집을 잇고, 어떤 두 집도 최대 한 개의 도로로만 연결됩니다.

Justas는 한 집에서 다른 집으로 같은 집을 두 번 이상 지나지 않고 가는 방법이 오직 하나뿐일 때 두 집 사이의 최단 경로를 찾는 알고리즘을 이미 작성했습니다. 하지만 그런 방법이 두 가지 이상 존재하는 집 쌍에 대해서는 여러분의 도움이 필요합니다.

QQ개의 집 쌍에 대해 최단 거리를 구하세요.

입력

첫 번째 줄에는 집의 수 NN과 질의의 수 QQ가 주어집니다.

다음 NN개의 줄에는 각각 공백으로 구분된 두 정수 aia_i와 bib_i가 주어지며, 이는 집 aia_i와 bib_i 사이에 도로가 있음을 의미합니다.

그 다음 QQ개의 줄에는 각각 공백으로 구분된 두 정수 cjc_j와 djd_j가 주어집니다.

출력

QQ개의 줄을 출력합니다. kk번째 줄에는 집 ckc_k와 dkd_k 사이 최단 경로의 길이를 하나의 정수로 출력합니다. Justas는 두 집 사이의 거리를 지나야 하는 도로의 수로 계산합니다.

제한

  • 3≤N≤2000003 \le N \le 200000
  • 1≤ai,bi≤N1 \le a_i, b_i \le N (1≤i≤N, ai≠bi)(1 \le i \le N,\ a_i \ne b_i)
  • 1≤Q≤10000001 \le Q \le 1000000
  • 1≤cj,dj≤N1 \le c_j, d_j \le N (1≤j≤Q, cj≠dj)(1 \le j \le Q,\ c_j \ne d_j)
  • cjc_j에서 djd_j로, 어떤 집도 두 번 이상 지나지 않는 경로가 (반드시 최단일 필요는 없이) 두 개 이상 존재합니다.
  • 임의의 집에서 도로를 따라 다른 어떤 집으로도 항상 이동할 수 있습니다.

예제5

  1. 예제 1

    입력
    5 1
    1 2
    2 3
    4 5
    2 4
    3 4
    1 5
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3 3
    1 2
    2 3
    3 1
    1 2
    2 3
    1 3
    
    예상 출력
    1
    1
    1
    
  3. 예제 3

    입력
    4 3
    1 2
    2 3
    3 4
    4 1
    1 3
    2 4
    1 2
    
    예상 출력
    2
    2
    1
    
  4. 예제 4

    입력
    6 5
    1 2
    2 3
    3 4
    4 5
    5 6
    6 1
    1 4
    1 3
    2 6
    3 6
    2 5
    
    예상 출력
    3
    2
    2
    3
    3
    
  5. 예제 5

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