BSOJ 5553 wangyurzee的树 prufer序列 容斥
2024-09-05 08:36:02
BSOJ我也不知道在哪.
容易想到容斥。
考虑不合法的方案 想到强制某个点的度数为限制即可。
这样就变成了了总方案-一个不合法+两个不合法-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;
}
最新文章
- 使用text存储hash类型的数据 Use text filed to store the hash map
- 设计模式:工厂方法模式(Factory Method)
- centos6.2下安装redis和phpredis扩展,亲测好用
- js为select添加option
- [LeetCode] 116. Populating Next Right Pointers in Each Node 解决思路
- DevC++ 工程没有调试信息的解决办法
- angular-ui-bootstrap插件API - Pagination
- 问题记录-运行Tomcat,项目程序没有响应
- js监听事件
- [转]真正的中国天气api接口xml,json
- “流式”前端构建工具——gulp.js 简介
- Docker Swarm bind 数据持久化
- Python全栈之路----Python2与Python3
- .NET Core开发日志——从ASP.NET Core Module到KestrelServer
- Dwr 框架简单实例
- ubuntu14.04下安装ffmpeg
- Qt下 QString转char*(转)
- STL中list中push_back(对象)保存对象的内部实现
- javascript 实现页面加载完的操作
- html超链接返回上一页面
热门文章
- 无间歇文字滚动_ 原生js实现新闻无间歇性上下滚动
- Linux系统安装JDK8
- 重学c#系列——对c#粗浅的认识(一)
- 浅谈.Net Core DependencyInjection源码探究
- flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别
- java 面向对象(九):类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念
- JS中this指向的更改
- IDEA搭建SpringMVC简单接口框架(Maven项目)
- 没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)
- JavaScript动画实例:曲线的绘制