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

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

트리 라벨링

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

요약
최대 1000개 정점을 가진 트리와 하나의 라벨링이 주어질 때 각 라벨의 이웃 라벨 집합을 유지하는 라벨링 개수를 구합니다.
난이도

어려움10점 중 8점

유형
트리, 조합론, 정렬
정답자
아직 제출이 없습니다

문제

트리 T=(V,E)T = (V, E)가 있다. VV는 정점의 집합이고 EE는 간선의 집합이다. 간선으로 vv와 이어진 정점을 TT에서 vv의 이웃이라 하고, vv의 이웃을 모두 모은 집합을 N(v)N(v)로 쓴다.

TT의 라벨링은 일대일 대응 함수 f:V→{1,2,…,∣V∣}f : V \to \{1, 2, \dots, |V|\}이다.

두 라벨링 ff와 gg가 다음 조건을 만족하면 서로 동치라고 한다. 모든 정점 u∈Vu \in V에 대해, f(u)=g(v)f(u) = g(v)이고 {f(u′)∣u′∈N(u)}={g(v′)∣v′∈N(v)}\{f(u') \mid u' \in N(u)\} = \{g(v') \mid v' \in N(v)\}인 정점 v∈Vv \in V가 존재한다. 이 정의에 따라 라벨링 ff는 자기 자신과 동치이다.

아래 그림은 서로 동치인 두 라벨링이다.

서로 동치인 두 라벨링

트리 TT와 TT의 라벨링 ff가 주어질 때, ff와 동치인 라벨링의 개수를 세는 프로그램을 작성하라. ff 자신도 ff와 동치이므로 개수에 포함한다.

입력

입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 TT (1≤T≤201 \le T \le 20)가 주어진다.

각 테스트 케이스의 첫 줄에는 트리의 정점 개수 NN (1≤N≤10001 \le N \le 1000)이 주어진다. 이어지는 N−1N-1개의 줄에는 각각 두 정수 ii와 jj (1≤i,j≤N1 \le i, j \le N)가 주어지며, 정점 ii와 정점 jj를 잇는 간선을 뜻한다. 그다음 줄에는 라벨링을 나타내는 정수 NN개가 주어지고, 그중 ii번째 수는 정점 ii의 라벨이다. 모든 정수는 공백 하나로 구분된다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스마다 ff와 동치인 라벨링의 개수를 한 줄에 출력한다. 이 개수는 매우 커질 수 있으므로 나머지 연산 없이 정확한 값을 출력한다.

예제1

  1. 예제 1

    입력
    2
    9
    2 8
    1 2
    2 3
    3 4
    4 5
    5 6
    4 7
    2 9
    1 9 2 6 3 7 4 5 8
    7
    1 5
    2 5
    5 7
    6 7
    3 6
    4 6
    7 1 6 2 5 3 4
    
    예상 출력
    6
    8