错误的写法
siz[u] += siz[v];
for (int i = 0; i <= min(K, siz[u]); ++i) {
for (int j = 0; j <= min(i, siz[v]); ++j) {
add(f[u][i][0][0], 1ll * g[i - j][0][0] * f[v][j][0][1]);
...
}
}
这么写会导致 #4 TLE,因为先加 siz 会导致 i 的枚举范围增大,会被刁钻的数据点卡掉。卡正确的写法是
for (int i = 0; i <= min(K, siz[u]); ++i) {
for (int j = 0; j <= min(K - i, siz[v]); ++j) {
add(f[u][i + j][0][0], 1ll * g[i][0][0] * f[v][j][0][1]);
...
}
}
siz[u] += siz[v];
为什么是在 #4 TLE 而不是后面的大点?我猜可能后面的点是随的吧qwq