BZOJ 1211 树的计数(purfer序列)
首先考虑无解的情况, 根据purfer序列,当dee[i]=0并且n!=1的时候,必然无解。否则为1.
且sum(dee[i]-1)!=n-2也必然无解。
剩下的使用排列组合即可推出公式。需要注意的是题目虽然说最终答案不会超过1e17,但是中间过程可能超。
由于n<=150, 所以sum最多是148. 于是我们可以打出150*150的组合表。实现O(1)计算组合数。
![](/assets/blank.gif)
![](/assets/blank.gif)
# include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> # include <queue> # include <stack> # include <map> # include <set> # include <cmath> # include <algorithm> using namespace std; # define lowbit(x) ((x)&(-x)) # define pi 3.1415926535 # define eps 1e-9 # define MOD 100000007 # define INF 1000000000 # define mem(a,b) memset(a,b,sizeof(a)) # define FOR(i,a,n) for(int i=a; i<=n; ++i) # define FO(i,a,n) for(int i=a; i<n; ++i) # define bug puts("H"); # define lch p<<1,l,mid # define rch p<<1|1,mid+1,r # define mp make_pair # define pb push_back typedef pair<int,int> PII; typedef vector<int> VI; # pragma comment(linker, "/STACK:1024000000,1024000000") typedef long long LL; int Scan() {int res=0, flag=0;char ch;if((ch=getchar())=='-') flag=1;else if(ch>='0'&&ch<='9') res=ch-'0';while((ch=getchar())>='0'&&ch<='9') res=res*10+(ch-'0');return flag?-res:res; } void Out(int a) {if(a<0) {putchar('-'); a=-a;}if(a>=10) Out(a/10);putchar(a%10+'0'); } const int N=10005; //Code begin...int dee[155]; LL cc[155][155];void init() {FOR(i,0,150) {cc[i][0]=1;FOR(j,1,i) cc[i][j]=cc[i-1][j-1]+cc[i-1][j];} } int main () {init();int n, sum=0;LL ans=1;scanf("%d",&n);if (n==1) {scanf("%d",dee);puts(dee[0]==0?"1":"0");return 0;}FOR(i,1,n) {scanf("%d",dee+i), --dee[i], sum+=dee[i];if (dee[i]<0) {puts("0"); return 0;}}if (sum!=n-2) {puts("0"); return 0;}FOR(i,1,n) {if (!dee[i]) continue;ans*=cc[sum][dee[i]];sum-=dee[i];}printf("%lld\n",ans);return 0; }
View Code
转载于:https://www.cnblogs.com/lishiyao/p/6543647.html
BZOJ 1211 树的计数(purfer序列)相关推荐
- BZOJ 1211: [HNOI2004]树的计数 purfer序列
1211: [HNOI2004]树的计数 Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给 ...
- bzoj1211 [HNOI2004]树的计数 prufer序列+组合数
如果独自去想出prufer序列实在太难了 所以就只能直接用结论,把树转成prufer序列后这棵树和prufer序列是一一对应的关系 树->prufer序列:每次找到所有叶子结点中编号最小的,删掉 ...
- 树的计数 Prüfer编码与Cayley公式 学习笔记
最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...
- bzoj 1211 [HNOI2004]树的计数
[HNOI2004]树的计数 Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, ...
- 最小生成树、矩阵树定理、Prufer序列总结
Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...
- 【BZOJ1211】【HNOI2004】树的计数(prufer序,组合数)
Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...
- 算法与数据结构07:前缀树,计数排序与桶排序
算法与数据结构07:前缀树,计数排序与桶排序 前缀树 计数排序 桶排序 前缀树 Trie 1.根据字符串数组中,每个字符串的字符作为路径,组成而成的一个多叉树结构 2.每个节点都有一个paths数组, ...
- K12563 输出树的广度优先遍历序列
K12563 输出树的广度优先遍历序列 今天我们再来说一题,看一下题目和样例吧. 好,这一题是图的BFS,BFS我就不说了,想知道的点这里 这一题就是一个模板,看一下这题的代码: #include&l ...
- 树的计数(prufer序列 或 purfer序列)
题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按 ...
最新文章
- 郑冠杰:KDD Cup城市大脑赛题方法总结!
- python自动生成测试报告步骤_生成HTMLTestRunner测试报告的操作步骤——Python+selenium自动化...
- Centos7.2搭建Openstack无法成功启动Trove
- Flutter Beta 3 新特性概览
- MyBatisPlus中使用 @TableField完成字段自动填充
- Django讲课笔记06:搭建项目开发环境
- 骁龙855加持!一加5G原型机将亮相MWC2019:价格却不太友好
- PNG免抠古风纹理背景太漂亮了,直接应用的才是好素材
- python第六篇文件处理类型
- springboot连接redis错误 io.lettuce.core.RedisCommandTimeoutException:
- java飞机大战子弹怎么修改_java改版飞机大战源码
- ajax验证本服务器,jquery – 使用Ajax调用的http基本身份验证
- 【学习】自定义view
- mysql的四大常用语句_SQL四大基本语句
- Spring Cloud Gateway服务网关
- 微信公众平台开发--入门了解
- Promise面试题汇总
- 【微信小程序】设备判断android还是ios及微信版本信息 ( 含工具类 )
- mysql服务启动正常,登录报错异常处理
- 2021年全球与中国重型泥浆泵行业市场规模及发展前景分析
热门文章
- eclipse左侧框不见了怎么办
- 代码段间转移控制时的特权级检查(JMP/CALL)——《x86汇编语言:从实模式到保护模式》读书笔记28
- 【⛸️拒绝手滑,我们都是稳准狠⛸️】C++のmemset函数的小探究
- linux不能ping通域名能ping通ip
- Ubuntu下用webstorm开发Nodejs(二)
- JZOJ 3158. 【JSOI2013】丢番图
- 计算机网络与云计算研究背景,基于云计算背景下的计算机网络安全研究
- linux内存分配缺陷,Linux系统优化-内存错误分析
- jenkins gitlab php,jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)...
- qlabel文本改变信号_周明:NLP进步将如何改变搜索体验