• BSOJ 5553 wangyurzee的树 prufer序列 容斥


    BSOJ我也不知道在哪.
    avatar

    容易想到容斥。

    考虑不合法的方案 想到强制某个点的度数为限制即可。

    这样就变成了了总方案-一个不合法+两个不合法-3个......的模型了。

    坑点 当强制两个相同的点时 方案数为0.

    当 序列长度>n-2的时候 方案数为0.

    注意一些边界条件啥的。这样的话利用爆搜就很好写了。

    const ll MAXN=1000010;
    ll n,len,m;
    ll ans,fac[MAXN],inv[MAXN];
    ll w[MAXN],du[MAXN],vis[MAXN];
    inline ll C(ll a,ll b){return a<b?0:fac[a]*inv[b]%mod*inv[a-b]%mod;}
    inline ll ksm(ll b,ll p)
    {
    	ll cnt=1;
    	while(p)
    	{
    		if(p&1)cnt=cnt*b%mod;
    		b=b*b%mod;p=p>>1;
    	}
    	return cnt;
    }
    inline void dfs(ll x,ll sum,ll cnt,ll v)
    {
    	if(x==m+1)
    	{
    		v=v*ksm(n-sum,n-2-cnt)%mod;
    		if(sum&1)ans=(ans-v)%mod;
    		else ans=(ans+v)%mod;
    		return;
    	}
    	dfs(x+1,sum,cnt,v);
    	if(du[x]-1<=n-2-cnt&&!vis[w[x]])
    	{
    		vis[w[x]]=1;
    		dfs(x+1,sum+1,cnt+du[x]-1,v*C(n-2-cnt,du[x]-1)%mod);
    		vis[w[x]]=0;
    	}
    }
    signed main()
    {
    	freopen("1.in","r",stdin);
    	get(n);get(m);fac[0]=1;
    	rep(1,m,i)get(w[i]),get(du[i]);
    	rep(1,n,i)fac[i]=fac[i-1]*i%mod;
    	inv[n]=ksm(fac[n],mod-2);
    	fep(n-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
    	dfs(1,0,0,1);putl((ans+mod)%mod);
    	return 0;
    }
    
  • 相关阅读:
    0705-深度网络模型持久化
    0704-使用GPU加速_cuda
    0703-可视化工具tensorboard和visdom
    0702-计算机视觉工具包torchvision
    00-凸优化引言
    MySQL数据库从入门到放弃(目录)
    0701-数据处理
    BurpSuite抓取HTTPS请求&&拦截Android请求
    数学里的e到底指什么
    QGeoPolygon
  • 原文地址:https://www.cnblogs.com/chdy/p/12843942.html
Copyright © 2020-2023  润新知