1 空隙 DFS(INT X) 2 { 3 [DP [X] 。1 ] =のS [I]、サイズ[X] = 1 ; 4 用(INT I =はじめ[X]; I; I = 次に[I]) 5 { 6。 // はじめ[X]に、エッジに対応する[I]は、子ノードx 7。 DFS([I]に) 。8 のための(INT J; J = Cminの(M、サイズ[X])J - ) 9 // これは[I]、前のサイズである 10 のための(int型 = K 1、K <= Cminの(MJ、サイズ[I]乃至]); ++ K ) 11。 //kは現在のサブノードに番号を意味 12は、 DP [X] [J + k]はのCmax(DP [X] [J + k]を=、DP [X] [J] + [K [I]に] DP ]); 13である サイズ[X] + = ] [Iの大きさ[]; 14 } 15 } 16 // サイズは、[X] iがルートノード点のサブツリーで表される、上記更新がアクティブである 17。 18が 空隙 DFS (INT X) 19 { 20は サイズ[X] = 1 ; 21である ため(int型 Iは、まず、[X]を=; I; I = 次に[I]) 22である { 23は DFS(の[I])、サイズ[X] + = サイズ[I] [する]; 24 用(INTJ =分(M、サイズ[X]); J; j-- ) 25 のための(INT K = 1 ; <=分(J、サイズ[[I]乃至] k)は、k個++ ) 26 [X] DP [ J] = MAX(DP [X] [J]、DP [X] [JK] + [Iに[DP] [K])。 27 } 28 のための(int型 ; I; I =分(M、サイズ[X])i--)DP [X] [I] = DP [X] [I- 1 ] + S [X]。// 保证父亲节点被选到 29 }