[关键字]: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]相关推荐

  1. HNOI2008题目总结

    呜呼..NOI前一个月正式开始切BZOJ了--以后的题解可能不会像之前的零散风格了,一套题我会集中起来发,遇到一些需要展开总结的东西我会另开文章详细介绍. 用了一天的时间把HNOI2008这套题切了- ...

  2. 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 ...

  3. 102. Binary Tree Level Order Traversal

    题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...

  4. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  5. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. 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 ...

  7. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  8. datagrid底部显示水平滚动_DevExpress WPF v19.1:Data Grid/Tree List等控件功能增强

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...

  9. java easyui tree例子_EasyUI Tree的简单使用

    此前写过zTree插件的demo,没有记录下来,这次记录一下EasyUI的Tree. 实现效果:获取数据库表的数据,以树结构的形式展示出来. 树结构数据分为同步加载和异步加载,同步加载就是初始化加载时 ...

最新文章

  1. 解决Android studio 非法字符的问题
  2. python 爬取贝壳网小区名称_利用python爬取贝壳网租房信息
  3. 在Ubuntu下利用Eclipse调试FFmpeg
  4. prototype.js常用函数及其用法
  5. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
  6. [vue] vue实例挂载的过程是什么?
  7. 上次那个上门要源代码的女网红,后来咋样了?
  8. CI(持续集成)/CD(持续部署)
  9. 数据库点滴积累——索引
  10. 不小心误删除Mac苹果系统联系人和Safari浏览器书签信息如何恢复?
  11. 干货来袭丨资产可用性真的是终极目标吗?
  12. java方法栈和c方法栈_Java虚拟机:本地方法栈与Native方法
  13. 2021-09-02编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
  14. java全局校验拦截器
  15. python 对象转json
  16. java OA办公管理系统 Springboot vue 前后分离 跨域 工作流 集成代码生成器java OA系统 流程审批 电子印章 手写文字识别 电子签名
  17. python学习——关于曲线拟合
  18. 第一节 函数与极限——映射与函数
  19. kali系统---DNS收集分析之dnsrecon
  20. CDH大数据平台 Error while compiling statement: FAILED: SemanticException No valid privileges User tianlin

热门文章

  1. python后端开发web_最简易的python web框架的后端实现
  2. 前端笔记-thymeleaf获取及回显input标签type=time
  3. Qt与java web通过数据库实现数据展示同步
  4. mysql 1045错误ODBC_MySQL ERROR 1045 (28000) 错误的解决办法
  5. php mysql存图片路径_PHP 批量下传图片 怎么保存路径到mysql
  6. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
  7. cholesky分解java代码_Cholesky 分解(转)
  8. c#endread怎么打印出来_C#教程之打印和打印预览
  9. ncl如何添加线shp文件_NCL画图个例讲解
  10. mysql data too large_MySQL数据库之mysql 主从同步故障解决   Error 'Row size too large ( 8126)....