함수동상 그래프

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

요약
각 정점에서 나가는 간선이 하나씩인 함수 그래프에서, 빈 정점으로만 동상을 옮길 수 있을 때 도달 가능한 동상 배치의 가짓수를 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

NN개의 정점과 NN개의 단방향 간선으로 이루어진 그래프가 주어진다. 각 정점에는 11부터 NN까지 번호가 매겨져 있다. 각 정점은 정확히 하나의 나가는 간선을 가지며, 그중 ii번 정점에서 나가는 간선의 도착 정점은 e_ie\_i번 정점이다. (1≤i,,e_i≤N)(1\le i, \\, e\_i \le N) 자기 자신으로 돌아가는 간선 역시 존재할 수 있다.

이 그래프의 정점 중 KK개의 정점 위에는 동상이 하나씩 놓여 있다. 이때 다음 행동을 00회 이상 원하는 만큼 실행할 수 있다.

  • ii번 정점의 동상을 선택해 간선을 따라 e_ie\_i번 정점으로 옮긴다. ii번 정점에는 동상이 놓여 있어야 하며, e_ie\_i번 정점에는 동상이 없어야 한다.

원하는 만큼 행동을 수행한 뒤, 동상이 올라가 있는 정점의 집합으로 가능한 경우의 수를 구해 보자.

입력

첫째 줄에 두 정수 NN과 KK가 공백으로 구분되어 주어진다. (1≤K≤N≤8,000)(1\le K\le N\le 8\\, 000)

둘째 줄에 각 정점에서 나가는 간선의 도착 정점의 번호를 나타내는 NN개의 정수 e_1,⋯ ,e_Ne\_1, \cdots, e\_N이 공백으로 구분되어 주어진다.

셋째 줄에 각 동상이 놓여 있는 정점의 번호를 나타내는 KK개의 서로 다른 양의 정수가 공백으로 구분되어 오름차순으로 주어진다.

출력

첫째 줄에 동상이 올라가 있는 정점의 집합으로 가능한 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다. 109+710^9+7은 소수다.

예제2

  1. 예제 1

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

    입력
    6 3
    2 3 1 1 2 3
    4 5 6
    
    예상 출력
    20