玄关,问一个不关于此题的问题...
查看原帖
玄关,问一个不关于此题的问题...
421291
Noble_Wolf楼主2024/10/24 12:40

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了,这两份代码只有有无合并同类项的区别,为何如此。。。

2024/10/24 12:40
加载中...