만드는 중입니다

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

나무 타기

면접 대비

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

요약
루트에서 리프까지 가는 경로 중 정점 i에서 거리 1부터 A_i 이내의 자손으로만 이동하는 경우의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 트리, 누적 합
정답자
아직 제출이 없습니다

문제

POSTECH 캠퍼스에는 정점이 NN개인 루트 트리가 있다. 정점은 1번부터 NN번까지 번호가 붙어 있고, ii번 정점의 부모는 PiP_i번 정점이다. 루트의 PiP_i 값은 0이다.

POSCAT 부원들은 트리 알고리즘을 공부하려고 이 트리에서 나무 타기 놀이를 한다. 놀이는 루트에서 출발해 리프 방향으로 점프를 반복하며 리프 노드에 도달하는 것이다. 리프 노드는 자식이 없는 노드이다. 각 정점에는 강도 AiA_i가 주어진다. ii번 정점에서 점프할 때는 ii번 정점과의 거리가 1 이상 AiA_i 이하인 정점으로만 뛸 수 있다. 즉, 현재 정점이 ii번이면 다음 정점은 ii번을 루트로 하는 서브트리에 속하고, ii번과의 거리가 1 이상 AiA_i 이하여야 한다.

두 놀이의 방문 정점 집합이 다르면 서로 다른 놀이로 본다. 트리가 주어질 때 서로 다른 나무 타기 놀이의 개수를 구하라. 답이 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

첫 번째 줄에 정점의 수 NN이 주어진다. (1≤N≤20001 \le N \le 2000) 두 번째 줄에는 각 정점의 부모 노드를 나타내는 NN개의 정수 P1,P2,…,PNP_1, P_2, \ldots, P_N이 공백으로 구분되어 주어진다. (0≤Pi≤N0 \le P_i \le N) 주어지는 그래프가 트리 구조임이 보장된다. 세 번째 줄에는 각 정점의 강도를 나타내는 NN개의 정수 A1,A2,…,ANA_1, A_2, \ldots, A_N이 공백으로 구분되어 주어진다. (0≤Ai≤N−10 \le A_i \le N-1)

출력

서로 다른 나무 타기 놀이의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    6
    0 1 2 2 4 1
    2 2 2 0 3 1
    
    예상 출력
    4