由于标签内包含背包和树形dp,所以考虑用背包dp和树形dp求解。
考虑每次合并2个连通块(一个包含根节点),设\(f_{i,j}\)表示\(i\)子树内,操作\(j\)次的方案数(未合并连通块),设\(f_{i,j}\)表示\(i\)子树内,操作\(j\)次的方案数(合并了连通块)。
设被合并的子树的根是\(v\),那么\((v,i)\)这条边必须在子树所有被操作过的边切断后切断。
设\(v\)子树切断了\(k\)条边,枚举有没有切断(v,i),如果切断了则现在整个子树切断了\(j+k+1\),否则切断了\(j+k\)条边。
由于我们还需要把\(v\)子树的操作序列插入\(i\)原来的操作序列,方案数为\(f_{i,j}*f_{v,k}*C_{j+k+1}^{j}\)或者\(f_{i,j}*f_{v,k}*C_{j+k}^{j}\)
根据树形背包,\(j\)不会超过\(i\)子树的大小,此处时间复杂度\(O(n^2)\)