허용되는 자식 수의 집합을 A라 하고
Φ(x)=a∈A∑a!xa
라고 두자. 라벨이 붙은 루트 트리의 지수 생성함수 T(x)는
T(x)=xΦ(T(x))
를 만족한다.
정점 1이 루트로 고정되어 있으므로, 크기 n의 답은
(n−1)![xn]T(x)
이다.
따라서 T(x)=xΦ(T(x))를 xN+1까지 구하면 된다. 뉴턴 반복을 사용하면 현재 근사값 T에 대해
T←T−1−xΦ′(T)T−xΦ(T)
로 정확도를 두 배씩 늘릴 수 있다. 다항식 역원과 곱셈은 NTT로 계산한다.
degΦ≤1000이므로 Φ(T)의 합성은 baby-step giant-step으로 처리한다. 블록 크기 B를 잡고 Φ(x)=∑jxjBQj(x)로 나누면, T0,T1,⋯,TB−1와 (TB)j들을 이용해 합성을 빠르게 계산할 수 있다.
전체 시간 복잡도는 O(Nlog2N)이다.
Solution written by GPT5.5