const ll N = 1e5+10,MOD = 1e9+7;
void add(int &a,ll b){
b%=MOD;
a=(a+b)%MOD;
}
int n,k,dp[N][110][2][2],siz[N];
vector<int>G[N];
int tmp[110][2][2];
void dfs(int u,int fa){
siz[u]=dp[u][1][1][0]=dp[u][0][0][0]=1;
for(int v:G[u]){
if(v==fa)continue;
dfs(v,u);
for(int i=0;i<=min(siz[u],k);i++)for(int j=0;j<=1;j++)for(int o=0;o<=1;o++)tmp[i][j][o]=dp[u][i][j][o],dp[u][i][j][o]=0;
for(int i=0;i<=min(siz[u],k);i++){
for(int j=0;j<=min(siz[v],k-i);j++){
// f[u][i+j]={f[u][i]+f[v][j]};
//dp[u][k][放][监听]
add(dp[u][i+j][0][0],1ll*tmp[i][0][0]*dp[v][j][0][1]);
add(dp[u][i+j][0][1],1ll*tmp[i][0][0]*dp[v][j][1][1]);
add(dp[u][i+j][0][1],1ll*tmp[i][0][1]*dp[v][j][1][1]);
add(dp[u][i+j][0][1],1ll*tmp[i][0][1]*dp[v][j][0][1]);
add(dp[u][i+j][1][0],1ll*tmp[i][1][0]*dp[v][j][0][1]);
add(dp[u][i+j][1][0],1ll*tmp[i][1][0]*dp[v][j][0][0]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][1]*dp[v][j][1][1]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][1]*dp[v][j][0][1]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][1]*dp[v][j][0][0]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][1]*dp[v][j][1][0]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][0]*dp[v][j][1][1]);
add(dp[u][i+1][1][1],1ll*tmp[i][1][0]*dp[v][j][1][0]);
}
}
siz[u]+=siz[v];
}
}
这份代码全WA
const ll N = 1e5+10,MOD = 1e9+7;
void add(int &a,ll b){
b%=MOD;
a=(a+b)%MOD;
}
int n,k,dp[N][110][2][2],siz[N];
vector<int>G[N];
int tmp[110][2][2];
void dfs(int u,int fa){
siz[u]=dp[u][1][1][0]=dp[u][0][0][0]=1;
for(int v:G[u]){
if(v==fa)continue;
dfs(v,u);
for(int i=0;i<=min(siz[u],k);i++)for(int j=0;j<=1;j++)for(int o=0;o<=1;o++)tmp[i][j][o]=dp[u][i][j][o],dp[u][i][j][o]=0;
for(int i=0;i<=min(siz[u],k);i++){
for(int j=0;j<=min(siz[v],k-i);j++){
// f[u][i+j]={f[u][i]+f[v][j]};
//dp[u][k][放][监听]
add(dp[u][i+j][0][0],1ll*tmp[i][0][0]*dp[v][j][0][1]);
add(dp[u][i+j][0][1],1ll*tmp[i][0][0]*dp[v][j][1][1]);
add(dp[u][i+j][0][1],1ll*tmp[i][0][1]*(dp[v][j][1][1]+dp[v][j][0][1])%MOD);
add(dp[u][i+j][1][0],1ll*tmp[i][1][0]*dp[v][j][0][1]);
add(dp[u][i+j][1][0],1ll*tmp[i][1][0]*dp[v][j][0][0]);
add(dp[u][i+j][1][1],1ll*tmp[i][1][1]*((((dp[v][j][1][1]+dp[v][j][1][0])%MOD+dp[v][j][0][1])%MOD+dp[v][j][0][0])%MOD));
add(dp[u][i+j][1][1],1ll*tmp[i][1][0]*(dp[v][j][1][1]+dp[v][j][1][0])%MOD);
}
}
siz[u]+=siz[v];
}
}
然鹅这份AC了,这两份代码只有有无合并同类项的区别,为何如此。。。