만드는 중입니다

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

신성한 숲의 탐색

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

요약
트리와 순열 p가 주어질 때, p의 부분 구간에 속한 정점들이 트리에서 서로 연결된 구간의 개수를 구합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 트리, 구현
정답자
아직 제출이 없습니다

배경

고대 루마니아의 깊은 곳, 빽빽한 숲과 높은 산이 만나는 자리에 바트라 코드릴로르 왕국이 있다. 왕국은 nn개의 신성한 숲으로 보호받는다. 숲에는 11부터 nn까지 번호가 붙어 있고, 각 숲은 수호 정령이 지킨다. 숲들은 현명한 장로들만 아는 비밀 길로 이어져 있다. 정식으로 말하면, 비밀 길은 트리를 이룬다.

보름달이 뜬 어느 밤, nn명의 수호자는 다키아 신들이 보낸 신성한 메시지를 받는다. 메시지는 목록 pp가 적힌 고대 두루마리다. 정식으로 pp는 길이가 nn인 수열이며, 11부터 nn까지의 모든 수가 정확히 한 번씩 나타난다. 이 목록은 마지막 전투에서 수호자들이 서야 할 순서를 알려 준다.

과제

목록의 각 부분 구간 [ℓ,r][\ell, r]에 대해, pℓ,pℓ+1,…,prp_{\ell}, p_{\ell+1}, \ldots, p_{r} 숲들이 다른 숲을 거치지 않고 비밀 길만으로 서로 이어져 있으면, 이 숲들의 수호자는 함께 모여 숲의 힘을 끌어낼 수 있다.

1≤ℓ≤r≤n1 \leq \ell \leq r \leq n을 만족하는 부분 구간 [ℓ,r][\ell, r] 중 이 성질을 가진 구간의 개수를 구하라.

입력

첫 줄에 정수 nn (1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5)이 주어진다.

이어지는 n−1n - 1개의 줄에는 트리의 간선을 나타내는 두 정수 uiu_i, viv_i (1≤ui,vi≤n1 \leq u_i, v_i \leq n)가 주어진다.

마지막 줄에는 서로 다른 nn개의 정수 p1,p2,…,pnp_1, p_2, \ldots, p_n (1≤pi≤n1 \leq p_i \leq n)이 주어진다.

출력

조건을 만족하는 부분 구간 [ℓ,r][\ell, r] (1≤ℓ≤r≤n1 \leq \ell \leq r \leq n)의 개수를 정수 하나로 출력한다. 즉, pℓ,…,prp_{\ell}, \ldots, p_{r} 숲들이 연결된 부분 그래프를 이루는 구간의 수다.

예제2

  1. 예제 1

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

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