BZOJ 1005 [HNOI2008]明明的烦恼 purfer序列,排列组合
2024-10-01 06:33:40
1005: [HNOI2008]明明的烦恼
Description
自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在
任意两点间连线,可产生多少棵度数满足要求的树?
Input
第一行为N(0 < N < = 1000),
接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1
Output
一个整数,表示不同的满足要求的树的个数,无解输出0
Sample Input
3
1
-1
-1
1
-1
-1
Sample Output
2
HINT
两棵树分别为1-2-3;1-3-2
Source
题解:
n为树的节点数,d[ ]为各节点的度数,m为无限制度数的节点数。
则
所以要求在n-2大小的数组中插入tot各序号,共有种插法;
在tot各序号排列中,插第一个节点的方法有种插法;
插第二个节点的方法有种插法;
………
另外还有m各节点无度数限制,所以它们可任意排列在剩余的n-2-tot的空间中,排列方法总数为;
根据乘法原理:
然后就要高精度了…..但高精度除法太麻烦了,显而易见的排列组合一定是整数,所以可以进行质因数分解,再做一下相加减。
关于n!质因数分解有两种方法,第一种暴力分解,这里着重讲第二种。
若p为质数,则n!可分解为 一个数*,其中且 <n
所以
——转自怡红公子
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include<vector>
using namespace std;
const int N = 1e5+, M = 1e3+, mod = , inf = 1e9+;
typedef long long ll;
int n;
int d[N],ans[N];
int cnt[N],len=;
void go_way(int x,int key) {
for(int j=;j*j<=x;j++) {
while(x%j==) {
cnt[j]+=key;
x/=j;
// cout<<j<<endl;
}
}
cnt[x]+=key;
}
int sum = ,m;
void mul(int x)
{
for(int i=;i<=len;i++)
ans[i]*=x;
for(int i=;i<=len;i++)
{
ans[i+]+=ans[i]/mod;
ans[i]%=mod;
}
while(ans[len+]>)
{len++;ans[len+]+=ans[len]/mod;ans[len]%=mod;}
}
int main() {
scanf("%d",&n);
if(n==) {
int x;
scanf("%d",&x);
if(!x) cout<<;
else cout<<;
return ;
}
for(int i=;i<=n;i++) {
scanf("%d",&d[i]);
if(!d[i]) {cout<<;return ;}
if(d[i]==-) m++;
else {d[i]--;sum+=(d[i]);}
}
if(sum > n-) {
cout<<;
return ;
}
for(int i=;i<=n-;i++) go_way(i,);
for(int i=;i<=n--sum;i++) {
go_way(i,-);
}
for(int i=;i<=n;i++) {
if(d[i])
for(int j=;j<=d[i];j++) {
go_way(j,-);
}
}
ans[] = ;
for(int i=;i<=n;i++) {
for(int j=;j<=cnt[i];j++) mul(i);
}
for(int i=;i<=n--sum;i++) mul(m);
for(int i=len;i>=;i--)
if(i==len)printf("%d",ans[i]);
else printf("%06d",ans[i]);
return ;
}
最新文章
- TODO:数据库优化之分页
- 给MySQL增加mysql-udf-http和mysql-udf-json自定义函数,让MySQL有调用http接口和查询直接回JSON的能力
- httpclient+Jsoup总结
- shell变量判空几种方法
- web.config中httpRunTime的属性
- C/C++中如何获取数组的长度?
- func 和action 委托的使用
- 一步一步学Vue(三)
- 201521123025 《Java程序设计》第2周学习总结
- 应用shell脚本停启Tomcat
- ansible-playbook(nginx例)
- vue 结合 FileReader() 实现上传图片预览功能
- onkeyup+onafterpaste 只能输入数字和小数点--转载
- jmeter4.0的汉化
- input debounce
- linux od命令详解
- [mysql] mysql 查询语句收集
- 通过超链接启动App
- 软件测试----H模型
- [励志英语片段]practicing deliberately
热门文章
- Spark2.0.2+Zeppelin0.6.2 环境搭建 初探
- 消除svn选定(checkout)桌面上文件显示一大堆问号。
- SQLServer2008 表连接时null 和 null 无法匹配?
- create-react-app 中设置反向代理、项目打包资源引入路径设置及 map 文件
- 《Java编程思想》学习笔记(一)
- numpy安装失败-小失误
- 【汇编】MASM6.15几个简单的汇编程序
- ASP.NET MVC5 网站开发实践(一)
- 点击button 触发另一个button 事件
- :before和:after结合使用