나무 타기 (Hard)
시간 제한2초메모리 제한1024 MB
루트에서 리프까지 이어지는 경로 중, 각 정점에서 A_i 단계 이내의 자손으로 내려가는 경로의 개수를 셉니다.
문제
이 문제는 나무 타기 문제와 의 제한을 제외하면 같은 문제이다.
POSTECH 캠퍼스에는 정점이 개인 루트가 있는 트리가 있다. 각 정점은 1번부터 번까지 번호를 가지며, 번 노드의 부모 노드는 번 노드이다. 루트의 경우 는 0이다.
POSCAT 부원들은 트리 알고리즘을 공부하기 위해 이 트리에서 나무 타기 놀이를 한다. 나무 타기 놀이는 루트 노드에서 시작해 리프 방향으로 점프를 반복하여 리프 노드에 도달하는 놀이이다. 리프 노드는 자식 노드가 없는 노드이다. 각 정점에는 강도 가 주어지며, 이 강도 이상의 세기로 점프하면 나무가 상할 수 있다. 따라서 부원들은 번 정점에서 점프할 때 거리가 1 이상 이하인 정점으로만 점프할 수 있다. 즉, 현재 정점이 번 정점이면 다음에 방문할 정점은 번 정점을 루트로 하는 서브트리에 속하면서 번 정점과의 거리가 1 이상 이하인 정점이어야 한다.
방문한 정점들의 집합이 다른 두 놀이는 서로 다른 놀이로 본다. 트리가 주어질 때, 서로 다른 나무 타기 놀이의 개수를 구하여라. 답이 클 수 있으므로 으로 나눈 나머지를 출력한다.
입력
첫 번째 줄에 정점의 수 이 주어진다. ()
두 번째 줄에 각 정점의 부모 노드를 나타내는 개의 정수 이 공백으로 구분되어 주어진다. 주어지는 그래프가 트리 구조임이 보장된다. ()
세 번째 줄에 각 정점의 강도를 나타내는 개의 정수 이 공백으로 구분되어 주어진다. ()
출력
서로 다른 나무 타기 놀이의 개수를 으로 나눈 나머지를 출력한다.