[HNOI2008 Tree]
[关键字]:Prüfer编码 Cayley定理
[题目大意]:告诉你N结点的树上部分点的度数,求这样的树一共有多少棵.
//==================================================================================
[分析]:刚刚看到这题时一点思路也没有,又想了一会儿,还是没思路……这题其实和Prüfer编码Cayley定理有关系,Cayley定理:一个n个节点的无根树有nn-2种形态。这个定理可以通过Prüfer编码来证明,见这里。通过Prüfer编码的推广可以得到n各右度限制的节点的无根树的个数,而n各有些有度限制的无根树个数怎么算呢?首先把有度限制的先算出来:
tot!/(d1-1)!/(d2-1)!……/(di-1)!(tot是所有度之和),因为实在n-2个位置中选出tot个所以还有再乘C(n-2,tot),而剩下的没有度限制的节点需要放在n-2-tot个位置,一共有
(n-tot)(n-2-tot)种方案,所以总共的方案数为:(n-tot)(n-2-tot)*C(n-2,tot)*tot!/(d1-1)!/(d2-1)!……/(di-1)!,稍微化简一下计算,除法要用分解质因数乘法要用高精度。
[代码]:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std; const int MAXN=10000; int n,tot,now,c,sum;int a[MAXN],s[MAXN],p[MAXN];int ans[MAXN];bool v[MAXN]; void Add(int x,int c){for (int i=1;i<=sum;++i)while (x%s[i]==0) { p[i]+=c; x/=s[i]; }} void Cheng(int t){int k=0;for (int i=1;i<=c;++i) { ans[i]=ans[i]*t+k; k=ans[i]/10; ans[i]=ans[i]%10; }while (k) { ans[++c]=k%10; k=k/10; }} void Init(){ scanf("%d",&n);for (int i=1;i<=n;++i) { scanf("%d",&a[i]);if (a[i]!=-1) tot+=a[i]-1; else ++now; } memset(v,0,sizeof(v));for (int i=2;i<=n;++i) {if (!v[i]) s[++sum]=i;for (int j=1;(j<=sum && i*s[j]<=n);++j) { v[i*s[j]]=1;if (i%s[j]==0) break; } }} void Solve(){for (int i=n-1-tot;i<=n-2;++i) Add(i,1);for (int i=1;i<=n;++i)if (a[i]!=-1)for (int j=2;j<a[i];++j) Add(j,-1);for (int i=1;i<=n-2-tot;++i) Add(now,1); c=1; ans[1]=1;for (int i=1;i<=sum;++i)for (int j=1;j<=p[i];++j) Cheng(s[i]);for (int i=c;i>=1;--i) printf("%d",ans[i]); printf("\n");} int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); Init(); Solve();return 0;}
转载于:https://www.cnblogs.com/procedure2012/archive/2012/04/06/2435496.html
[HNOI2008 Tree]相关推荐
- HNOI2008题目总结
呜呼..NOI前一个月正式开始切BZOJ了--以后的题解可能不会像之前的零散风格了,一套题我会集中起来发,遇到一些需要展开总结的东西我会另开文章详细介绍. 用了一天的时间把HNOI2008这套题切了- ...
- 107. Binary Tree Level Order Traversal II
题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...
- 102. Binary Tree Level Order Traversal
题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...
- Python---哈夫曼树---Huffman Tree
今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...
- [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Code Forces Bear and Forgotten Tree 3 639B
B. Bear and Forgotten Tree 3 time limit per test2 seconds memory limit per test256 megabytes inputst ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- datagrid底部显示水平滚动_DevExpress WPF v19.1:Data Grid/Tree List等控件功能增强
行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...
- java easyui tree例子_EasyUI Tree的简单使用
此前写过zTree插件的demo,没有记录下来,这次记录一下EasyUI的Tree. 实现效果:获取数据库表的数据,以树结构的形式展示出来. 树结构数据分为同步加载和异步加载,同步加载就是初始化加载时 ...
最新文章
- 解决Android studio 非法字符的问题
- python 爬取贝壳网小区名称_利用python爬取贝壳网租房信息
- 在Ubuntu下利用Eclipse调试FFmpeg
- prototype.js常用函数及其用法
- Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
- [vue] vue实例挂载的过程是什么?
- 上次那个上门要源代码的女网红,后来咋样了?
- CI(持续集成)/CD(持续部署)
- 数据库点滴积累——索引
- 不小心误删除Mac苹果系统联系人和Safari浏览器书签信息如何恢复?
- 干货来袭丨资产可用性真的是终极目标吗?
- java方法栈和c方法栈_Java虚拟机:本地方法栈与Native方法
- 2021-09-02编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
- java全局校验拦截器
- python 对象转json
- java OA办公管理系统 Springboot vue 前后分离 跨域 工作流 集成代码生成器java OA系统 流程审批 电子印章 手写文字识别 电子签名
- python学习——关于曲线拟合
- 第一节 函数与极限——映射与函数
- kali系统---DNS收集分析之dnsrecon
- CDH大数据平台 Error while compiling statement: FAILED: SemanticException No valid privileges User tianlin
热门文章
- python后端开发web_最简易的python web框架的后端实现
- 前端笔记-thymeleaf获取及回显input标签type=time
- Qt与java web通过数据库实现数据展示同步
- mysql 1045错误ODBC_MySQL ERROR 1045 (28000) 错误的解决办法
- php mysql存图片路径_PHP 批量下传图片 怎么保存路径到mysql
- n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
- cholesky分解java代码_Cholesky 分解(转)
- c#endread怎么打印出来_C#教程之打印和打印预览
- ncl如何添加线shp文件_NCL画图个例讲解
- mysql data too large_MySQL数据库之mysql 主从同步故障解决 Error 'Row size too large ( 8126)....