괄호 경로
시간 제한3초메모리 제한1024 MB
각 노드에 '(' 또는 ')'가 적힌 트리에서 경로 문자열 w_{a,b}가 올바른 괄호열이 되는 순서쌍 (a,b)의 개수를 센다.
문제
식은 짝이 올바르게 맞는 괄호로만 이루어진 문자열이다. 예를 들어 "()()"와 "(()())"는 식이고, ")("와 "()("는 식이 아니다. 식은 다음과 같이 귀납적으로 정의할 수 있다.
- "
()"는 식이다. - 가 식이면 "
()"도 식이다. - 와 가 식이면 ""도 식이다.
트리는 부터 까지 번호가 붙은 개의 정점과 개의 간선으로 이루어지며, 어느 두 정점 사이에도 경로가 정확히 하나 존재하는 구조이다. 각 정점에는 문자가 하나씩 적혀 있고, 그 문자는 여는 괄호 "(" 또는 닫는 괄호 ")"이다. 서로 다른 두 정점 와 에 대해 는 에서 로 가는 유일한 경로를 따라가면서 지나는 정점에 적힌 문자를 차례대로 이어 붙인 문자열이다. 에는 정점 의 문자(맨 앞)와 정점 의 문자(맨 뒤)도 포함된다.
가 올바른 식이 되는 서로 다른 정점의 순서쌍 의 개수를 구하여라. 와 는 서로 뒤집힌 문자열이므로 와 는 따로 센다.
입력
첫째 줄에 트리의 정점 수 이 주어진다. ()
둘째 줄에 길이가 인 문자열이 주어진다. 각 문자는 "(" 또는 ")"이며, 번째 문자는 정점 에 적힌 문자이다.
다음 개의 줄에는 각각 간선으로 직접 연결된 두 정점의 번호 와 가 주어진다. (, )
출력
조건을 만족하는 순서쌍의 개수를 출력한다.