一天,他问了小 H 和小 W 这样一个问题:
如果在一个圆上有 n 个不同的点,依次标号为 1 到 n,有多少种方案能把它们连成一棵树?
小 H & 小 W:这不是sb题吗?
小 L:那如果连边不能相交呢?
小 H & 小 W:这不是sb题吗?
小 L:那如果把「树」换成「图」呢呢?
小 H & 小 W:这不是sb题吗?
小 L:那如果给每个点一个权值 ai,连接 (i,j) 的边权值为 ai×aj,求满足上面的图的期望所有边权值之和呢?
小 H & 小 W:这不是sb题吗?
小 L 见自己辛苦做了许久都没写出的题目被 dalao 轻松秒杀后十分郁闷。为了安慰他,你需要帮他做出这个问题。
注意
- 两条边在端点处不视作相交。
- 没有边的图(即只有 n 个点,之间没有边相连)也合法
- 点按顺时针从 1 到 n 编号。
- 图中不能有自环和重边
设 fi 表示有 i 个点的方案,gi 表示 i 个点并且 1 和 i 之间有连边的方案。显然 fi=2gi 因为在 fi 里 1 和 i 之间那一条边可以连也可以不连。那么答案就是:
i=1∑nj=i+1∑naiajfngj−i+1gn−j+i+1
=i=1∑nj=i+1∑naiaj4fnfj−i+1fn−j+i+1
=4fni=1∑nj=i+1∑naiajfj−i+1fn−j+i+1
令 ti=fi+2fn−i,那么:
=4fnj=1∑naji=1∑j−1aitj−1−i
注意到 a0=0,那么:
=4fnj=1∑naji=0∑j−1aitj−1−i
是个卷积的形式,不难求。重点就变成了怎么求 f,显然边界是 f1=1。
假设当前知道了 f1…i−1,要求 fi,那么令 j 表示 i 连到的最小编号的点,不难发现 i 到 j 这条边把图分成了两个相对独立的部分,所以:
fi=fi−1+j=1∑i−1gi−j+1fj (注意这里是 gi−j+1fj 因为另一部分不能包含 i)
=fi−1+2j=1∑i−1fi−j+1fj
=2fi−1+j=2∑i−1fi−j+1fj(把 2fif1 移到左边再同时乘 2)
是个卷积的形式!但是朴素是 O(n2logn) 的,TLE。
考虑让这个卷积变得更加标准,设 hi=fi+1,那么有:
hi−1=2hi−2+j=2∑i−1hi−jhj−1
hi=2hi−1+j=2∑ihi+1−jhj−1
=2hi−1+j=1∑i−1hi−jhj
如果能带上 h0 就完美了!
2hi=2hi−1+j=0∑i−1hi−jhj
3hi=2hi−1+i=0∑ihi−jhj(因为 h0=f1=1)
hi=32hi−1+31j=0∑ihi−jhj
设 H(x)=i=0∑infhixi 即 h 的生成函数,那么有:
H=31H2+32xH+32(加上 32 是因为 h0)
31H2+(32x−1)H+32=0
H=321−32x±94x2−34x+1−98
=23−2x±4x2−12x+1
因为 H(0)=1,所以显然取减号。
H=23−2x−4x2−12x+1
考虑拆掉根号,我们可以设 q(x)=4x2−12x+1,Q(x)=q(x)21,那么有:
Q′(x)=21q(x)−21q′(x)(注意链式法则)
Q′(x)q(x)=21q(x)21q′(x)=21Q(x)q′(x)
那么设 Q(x)=i=0∑infbixi,Q′(x)=i=0∑infbi+1(i+1)xi,然后因为 q(x)=4x2−12x+1,所以 q′(x)=8x−12,也即是说:
Q′(x)q(x)=(i=0∑infbi+1(i+1)xi)4x2−12x+1
=i=0∑infbi+1(i+1)xi−12bi+1(i+1)xi+1+4bi+1(i+1)xi+2
=i=0∑inf(bi+1(i+1)−12bii+4bi−1(i−1))xi(假设 b−1=0)
21Q(x)q′(x)=21(i=0∑infbixi)8x−12
=i=0∑inf4bixi+1−6bixi
=i=0∑inf(4bi−1−6bi)xi(假设 b−1=0)
∵Q′(x)q(x)=21Q(x)q′(x)
∴i=0∑inf(bi+1(i+1)−12bii+4bi−1(i−1))xi=i=0∑inf(4bi−1−6bi)xi
∴bi+1(i+1)−12bii+4bi−1(i−1)=4bi−1−6bi
解得 bi+1=i+1(8−4i)bi−1+(12i−6)bi,显然边界时 b0=1,b1=−6,那么我们就成功去掉了根号。
看回 H=23−2x−4x2−12x+1 这条柿子,现在我们知道它等于 23−2x−i=0∑infbixi,那么我们只需要将 b 全部负过来,b0→b0+3,b1→b1−2,然后对所有 b 除以 2,b 就变成了 h,我们就求得了 f。