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

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

Bi-ing Lottery Treekets

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

요약
N개 노드의 루트 이진 트리에 K개의 공을 떨어뜨려 만들 수 있는 서로 다른 당첨 티켓의 수를 10^9+7로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

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

문제

평행 우주에서는 모든 참가자가 CCO에서 만점을 받았다. 그래서 Troy는 복권으로 우승자를 정해야 한다. 각 참가자는 숫자를 골라 티켓을 만든다. 티켓은 크기가 NN인 배열이고, 인덱스는 11부터 NN까지이다. 각 칸에는 00부터 KK까지의 수가 들어간다.

당첨 티켓은 KK개의 공(번호는 11부터 KK까지)을 무작위 순서로 루트가 있는 이진 트리에 떨어뜨려 정해진다. 트리에는 NN개의 노드(번호는 11부터 NN까지)가 있고, 루트는 노드 11이다.

각 공에는 떨어뜨릴 시작 노드가 정해져 있다. 공이 비어 있는 노드에 떨어지거나 비어 있는 노드로 들어가면 다음 세 경우 중 하나가 일어난다.

  1. 현재 노드의 자식이 모두 공으로 차 있거나 자식이 없으면, 공은 현재 노드에 멈춘다. 그 뒤로는 다시 움직이지 않는다.
  2. 현재 노드의 빈 자식이 하나뿐이면, 공은 그 자식으로 옮겨 간다.
  3. 현재 노드의 빈 자식이 둘이고 공이 방금 떨어진 것이라면, 공은 왼쪽이나 오른쪽 중 어느 쪽으로든 갈 수 있다. 그렇지 않으면 이전 이동 방향을 그대로 따라간다.

KK개의 공을 모두 떨어뜨리지 못하면 당첨 티켓은 정해지지 않는다. 공을 떨어뜨릴 노드가 이미 다른 공으로 차 있을 때 이런 일이 생긴다.

KK개의 공을 모두 떨어뜨리면, 공이 멈춘 위치로 당첨 티켓이 정해진다. 티켓의 ii번째 값은 노드 ii에 멈춘 공의 번호이고, 노드 ii에 멈춘 공이 없으면 00이다.

Troy는 가능한 당첨 티켓이 몇 개인지 알고 싶어 한다. 0개일 수도 있다.

입력

첫 줄에는 이진 트리의 노드 수 NN과 공의 수 KK가 공백으로 구분되어 주어진다.

다음 줄에는 KK개의 정수가 공백으로 구분되어 주어진다. ii번째 정수는 번호가 ii인 공을 떨어뜨릴 시작 노드이다.

마지막 NN개의 줄에는 각각 두 정수가 공백으로 구분되어 주어진다. ii번째 줄에는 노드 ii의 왼쪽 자식 LiL_i와 오른쪽 자식 RiR_i가 주어진다. 값이 00이면 해당 자식이 없다는 뜻이다.

출력

당첨 티켓의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

힌트

이진 트리는 비어 있거나, 루트 노드와 왼쪽 부분 트리, 오른쪽 부분 트리로 이루어진 노드의 집합이다. 이때 왼쪽 부분 트리와 오른쪽 부분 트리도 모두 이진 트리이다. 노드 xx의 왼쪽 부분 트리가 비어 있지 않으면, 그 부분 트리의 루트를 xx의 왼쪽 자식이라고 한다. 오른쪽 부분 트리도 같은 방식으로 xx의 오른쪽 자식이 된다.

예제2

  1. 예제 1

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

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