大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m
枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点
拓展$Caylay$定理
$n$个有标号节点生成k棵树的森林, 且给定$k$个点各属于$k$棵树的方案数为$kn^{n-k-1}$
可以得到有$x$条边的方案数为$\binom{m-1}{x-1}\binom{n-2}{x-1}(x-1)!m^{n-1-x}(x+1)n^{n-x-2}$
int n, m; ll fac[N], ifac[N]; ll C(int x, int y) { if (y>x) return 0; return fac[x]*ifac[y]%P*ifac[x-y]%P; } void init() { fac[0]=ifac[0]=fac[1]=ifac[1]=1; REP(i,2,N-1) fac[i]=fac[i-1]*i%P,ifac[i]=inv(fac[i]); } int main() { scanf("%d%d%*d%*d", &n, &m); init(); ll ans = 0; REP(i,1,n-1) { ll t = C(m-1,i-1)*C(n-2,i-1)%P*fac[i-1]%P*qpow(m,n-1-i)%P; if (i!=n-1) t = t*(i+1)%P*qpow(n,n-i-2)%P; (ans+=t)%=P; } printf("%lld\n", ans); }