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

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

괄호 경로

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

요약
각 노드에 '(' 또는 ')'가 적힌 트리에서 경로 문자열 w_{a,b}가 올바른 괄호열이 되는 순서쌍 (a,b)의 개수를 센다.
난이도

어려움10점 중 9점

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

문제

식은 짝이 올바르게 맞는 괄호로만 이루어진 문자열이다. 예를 들어 "()()"와 "(()())"는 식이고, ")("와 "()("는 식이 아니다. 식은 다음과 같이 귀납적으로 정의할 수 있다.

  • "()"는 식이다.
  • aa가 식이면 "(aa)"도 식이다.
  • aa와 bb가 식이면 "abab"도 식이다.

트리는 11부터 nn까지 번호가 붙은 nn개의 정점과 n−1n - 1개의 간선으로 이루어지며, 어느 두 정점 사이에도 경로가 정확히 하나 존재하는 구조이다. 각 정점에는 문자가 하나씩 적혀 있고, 그 문자는 여는 괄호 "(" 또는 닫는 괄호 ")"이다. 서로 다른 두 정점 aa와 bb에 대해 wa,bw_{a,b}는 aa에서 bb로 가는 유일한 경로를 따라가면서 지나는 정점에 적힌 문자를 차례대로 이어 붙인 문자열이다. wa,bw_{a,b}에는 정점 aa의 문자(맨 앞)와 정점 bb의 문자(맨 뒤)도 포함된다.

wa,bw_{a,b}가 올바른 식이 되는 서로 다른 정점의 순서쌍 (a,b)(a, b)의 개수를 구하여라. wa,bw_{a,b}와 wb,aw_{b,a}는 서로 뒤집힌 문자열이므로 (a,b)(a, b)와 (b,a)(b, a)는 따로 센다.

입력

첫째 줄에 트리의 정점 수 nn이 주어진다. (1≤n≤300 0001 \le n \le 300\,000)

둘째 줄에 길이가 nn인 문자열이 주어진다. 각 문자는 "(" 또는 ")"이며, jj번째 문자는 정점 jj에 적힌 문자이다.

다음 n−1n - 1개의 줄에는 각각 간선으로 직접 연결된 두 정점의 번호 xx와 yy가 주어진다. (1≤x,y≤n1 \le x, y \le n, x≠yx \ne y)

출력

조건을 만족하는 순서쌍의 개수를 출력한다.

예제3

  1. 예제 1

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

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

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