dp+容斥原理(初级)

Grid2

Grid2题解

简述:

正确性可以保证
因为dp[i]表示不经过任何障碍,然后抵达i这个点的方案数,而i本身就是障碍物,所以枚举j就相当于枚举从(1,1)出发,并且第一次经过的障碍物是j,这样子能够绝对保证计算方案不重不漏

树形dp+容斥

https://codeforces.com/gym/103427/problem/L

#include <bits/stdc++.h>

#define int long long
#define x first
#define y second
#define endl '\n'

using namespace std;
const int N = 4010,mod=998244353,M=2010;

int f[N][M][2],g[M][2],infact[N],fact[N],sz[N];
vector<int> e[N];

int qmi(int a,int k){
	int res=1;
	while(k){
		if(k&1) res=res*a%mod;
		a=a*a%mod;
		k>>=1;
	}
	return res;
}

void init(){
	fact[0]=infact[0]=1;
	for(int i=1;i<N;i++)fact[i]=fact[i-1]*i%mod;
	infact[N-1]=qmi(fact[N-1],mod-2);
	for(int i=N-2;i>=1;i--) infact[i]=infact[i+1]*(i+1)%mod;
}

int C(int n,int m){
	return fact[n]*infact[m]%mod*infact[n-m]%mod;
}

void dfs(int u,int fa){
	sz[u]=f[u][0][0]=1;//选了0条边 
	for(auto v:e[u]){
		if(v==fa) continue;
		dfs(v,u);
		for(int i=0;i<=sz[u]/2;i++){
			for(int j=0;j<=sz[v]/2;j++){
				g[i+j][0]=(g[i+j][0]+f[u][i][0]*(f[v][j][0]+f[v][j][1])%mod)%mod;
				g[i+j][1]=(g[i+j][1]+f[u][i][1]*(f[v][j][0]+f[v][j][1])%mod)%mod;
				g[i+j+1][1]=(g[i+j+1][1]+f[u][i][0]*f[v][j][0]%mod)%mod;
			}
		}
		for(int i=0;i<=sz[u]/2+sz[v]/2+1;i++){
			f[u][i][0]=g[i][0],f[u][i][1]=g[i][1];
			g[i][0]=g[i][1]=0;
		}
		sz[u]+=sz[v];//可以将看似n^3的复杂度的树形dp转化为n^2复杂度
	}
}

void solve() {
	int n;cin>>n;
	for(int i=1;i<n*2;i++){
		int u,v;cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1,0);
	int ans=fact[2*n]*infact[n]%mod*qmi(qmi(2,n),mod-2)%mod;
//	cout<<ans<<endl;
	for(int i=1;i<=n;i++){//x条边 
		int res=(f[1][i][0]+f[1][i][1])*fact[2*n-2*i]%mod*infact[n-i]%mod*qmi(qmi(2,n-i),mod-2)%mod;
//		cout<<res<<endl;
		if(i%2==1) ans-=res;
		else ans+=res;
		if(ans>mod) ans-=mod;
		if(ans<0) ans+=mod;
	}
	cout<<ans<<endl;
}

signed main() {
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	init();
	int T=1;
//	cin>>T; 
	while (T--) solve();
}
posted @   MENDAXZ  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示