rt,我测试了这份题解代码:
#include <bits/stdc++.h>
using namespace std ;
#define int long long
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define rep1(i,x,y) for(int i=x;i>=y;i--)
#define fire signed
#define kong putchar(' ')
#define end putchar('\n')
#define in(x) scanf("%lld",&x)
#define lcm(x,y) x*y/__gcd(x,y)
#define w(x) while(x--)
#define il inline
il void print(int x) {
if(x>=10) print(x/10);
putchar(x%10+'0');
}
int n,k;
const int p=1e9+7;
const int N=1e6+10;
int siz[N];
int fc[N],inv[N];
vector<int>v[N];
int C(int x,int y) {
return (fc[x]*inv[x-y]%p*inv[y]%p);
}
int qmi(int x,int y) {
int res=1;
while(y) {
if(y&1) res=res*x%p;
x=x*x%p;
y>>=1;
}
return res;
}
int res=0;
void dfs(int x,int fa) {
siz[x]=1;
for(auto y:v[x]) {
if(y!=fa) {
dfs(y,x);
siz[x]+=siz[y];
res+=(C(siz[y],k/2)*C(n-siz[y],k/2)%p);//统计分子
res%=p;
}
}
}
fire main() {
cin>>n>>k;
if(k&1) {
cout<<1<<endl;
} else {
fc[0]=1;
rep(i,1,n) fc[i]=fc[i-1]*i%p;
inv[0]=1;
inv[n]=qmi(fc[n],p-2);
rep1(i,n-1,1) inv[i]=inv[i+1]*(i+1)%p;//预处理
int ni=qmi(C(n,k),p-2);
rep(i,1,n-1) {
int x=i,y=i+1;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1,0);
cout<<(res*qmi(C(n,k),p-2)%p+1)%p<<endl;//提出来了C(n,k)
}
return false;
}
因为叶节点的size=1,而C(size,k/2)函数中会使用inv[size-k/2]即inv[-99999]。我认为会RE,包括我本地测起来也RE了,但在CF IDE上正常运行?