CF382E

orz sinsop90/bx

乌龟和 sinsop 结芬!!!

题意即数最大匹配为 k 的二叉树个数。数树问题,考虑不断加入子树 dp。但是这题是二叉树,所以可以直接每次将两个并作一个转移。

考虑怎么设计状态:子树 siz 肯定是要记的,然后最大匹配数也是。发现只记这两个不好转移,于是再记录当前子树根有没有选的 0/1 状态。

于是设 dpi,j,0/1 为当前子树大小为 i,最大匹配为 j,根是/否被选。

考虑转移,首先枚举两棵子树大小 i,p 及分别的最大匹配 j,q。先考虑合并后根没有被选,则两棵子树根都已经被选,即:

dpi+p+1,j+q,0:=dpi+p+1,j+q,0+dpi,j,1×dpp,q,1×(i+p+1i)×(p+1p)

后面两个组合数是选定点的标号的方案数。

否则根没有被选,则两个子树至少有一个根没被选。则类似地,有:

dpi+p+1,j+q+1,1:=dpi+p+1,j+q,1+dpi,j,0/1×dpp,q,0/1×(i+p+1i)×(p+1p)

两边不同时为 1

还有一点小问题,当 i=p 时会算重,此时在转移时乘上 12 即可。

初始值为 dp0,0,1=dp1,0,0=1ans=1n(dpn,m,0+dpn,m,1) 因为根为 1。时间复杂度 O(n4)

code:

点击查看代码
int n,m,fac[N],ifac[N],dp[N][N][2];
il int Mod(int x,int y){return x+y>=mod?x+y-mod:x+y;}
il int binom(int x,int y){return 1ll*fac[x]*ifac[y]%mod*ifac[x-y]%mod;}
il int qpow(int x,int y){
	int ret=1;
	while(y){
		if(y&1)ret=1ll*ret*x%mod;
		x=1ll*x*x%mod,y>>=1;
	}
	return ret;
}
void Yorushika(){
	scanf("%d%d",&n,&m);
	fac[0]=1;
	rep(i,1,n)fac[i]=1ll*fac[i-1]*i%mod;
	ifac[n]=qpow(fac[n],mod-2);
	drep(i,n-1,0)ifac[i]=1ll*ifac[i+1]*(i+1)%mod;
	dp[0][0][1]=dp[1][0][0]=1;
	const int iv2=qpow(2,mod-2);
	rep(i,1,n-1)rep(j,0,i/2){
		rep(p,0,min(n-i,i))rep(q,0,p/2){//I love turtles(It's written by sinsop90!)
			int x=i==p?iv2:1;
			dp[i+p+1][j+q][0]=Mod(dp[i+p+1][j+q][0],1ll*dp[i][j][1]*dp[p][q][1]%mod*binom(i+p+1,i)%mod*binom(p+1,p)%mod*x%mod);
			dp[i+p+1][j+q+1][1]=Mod(dp[i+p+1][j+q+1][1],1ll*dp[i][j][0]*dp[p][q][0]%mod*binom(i+p+1,i)%mod*binom(p+1,p)%mod*x%mod);
			dp[i+p+1][j+q+1][1]=Mod(dp[i+p+1][j+q+1][1],1ll*dp[i][j][0]*dp[p][q][1]%mod*binom(i+p+1,i)%mod*binom(p+1,p)%mod*x%mod);
			dp[i+p+1][j+q+1][1]=Mod(dp[i+p+1][j+q+1][1],1ll*dp[i][j][1]*dp[p][q][0]%mod*binom(i+p+1,i)%mod*binom(p+1,p)%mod*x%mod);
		}
	}
	printf("%lld\n",1ll*Mod(dp[n][m][0],dp[n][m][1])*qpow(n,mod-2)%mod);
}
signed main(){
	int t=1;
	//	scanf("%d",&t);
	while(t--)
		Yorushika();
}
posted @   yinhee  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示