[HNOI2004]树的计数(prufer编码+组合数学)
来源:互联网 发布:2016淘宝开店教程视频 编辑:程序博客网 时间:2024/05/22 13:06
题目:一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。
思路:参考2008年国家集训队论文周梦宇《码之道——浅谈信息学竞赛中的编码与译码问题》
看完论文之后很容易知道这道题的答案即为(n-2)!/(d1-1)!(d2-1)!...(dn-1)!
这道题的数据虽然不大,但是如果直接计算会爆long long
根据组合数学的知识,显然该式最终结果为整数。可以用分解质因数的方法来计算最终结果。
另外,需要考虑两个特殊情况,第一个是只有一个结点,第二个是无法构成一个prufer数列。
#include <bits/stdc++.h>using namespace std; typedef long long ll;const int INF=0x3f3f3f3f;const int maxn=155;int n;ll d[maxn];ll cnt[maxn]; void makePrime(int x,int k){ int div=2; while(x>1){ if(x%div==0){ cnt[div]+=k; x/=div; } else div++; }} int main(){ while(~scanf("%d",&n)){ int tot=0; for(int i=1;i<=n;i++){ scanf("%lld",&d[i]); if(d[i]>1) tot+=d[i]-1; } if(n==1) {printf("%d\n",!d[1]);continue;} if(tot!=n-2) {printf("0\n");continue;} memset(cnt,0,sizeof(cnt)); for(int i=2;i<=n-2;i++) makePrime(i,1); for(int i=1;i<=n;i++){ for(int j=2;j<=d[i]-1;j++){ makePrime(j,-1); } } ll ans=1; for(int i=1;i<=n;i++){ for(int j=1;j<=cnt[i];j++){ ans*=i; } } printf("%lld\n",ans); } return 0;}
0 0
- [HNOI2004]树的计数(prufer编码+组合数学)
- [BZOJ 1211][HNOI2004]树的计数(prufer编码+组合数学)
- 【bzoj1284】【HNOI2004】【树的计数】【组合数学+prufer数列】
- 【BZOJ】1211 [HNOI2004]树的计数 prufer编码+组合数学+高精度
- 【BZOJ1211】树的计数(HNOI2004)-Prufer序列+组合计数
- BZOJ 题目1211: [HNOI2004]树的计数(组合数学,prufer)
- bzoj 1211: [HNOI2004]树的计数 (prufer序列+组合数学)
- [BZOJ1211][HNOI2004]树的计数(prufer序列+数学相关)
- [HNOI2004]树的计数(prufer编码)
- bzoj1211 [HNOI2004]树的计数 prufer序列+组合数
- 1211: [HNOI2004]树的计数 (prufer编码,排列组合,质因数分解)
- BZOJ 1211: [HNOI2004]树的计数 prufer编码
- [Prufer] BZOJ 1211 [HNOI2004]树的计数
- bzoj1211 [HNOI2004]树的计数 prufer序列
- 【BZOJ1211】【HNOI2004】树的计数 prufer序列
- [BZOJ1211][HNOI2004][prufer序列][排列]树的计数
- BZOJ 1211 HNOI2004 树的计数 Prufer序列
- 【组合数学】【prufer数列】【HNOI 2004】【bzoj 1211】树的计数
- 面试题89:字符串数组首尾字符相同
- 关于QT中自动添加槽函数编译出错的问题
- JZOJ 4302【NOIP2015模拟11.3】IOIOI卡片占卜
- urllib2 cookielib
- C# OOP程序设计目录
- [HNOI2004]树的计数(prufer编码+组合数学)
- 一些概念
- 数列极差问题
- FJNUOJ1156
- 综合案例 第80课:Spark SQL网站搜索综合案例实战 以京东找出搜索平台上用户每天搜索排名5名的产品,The hottest!
- 客户端储存
- [Sicily 1090 Highways] 求最小生成树的两种算法(普里姆算法/克鲁斯卡尔算法)
- 串(链串)
- 使用CSS3实现流星雨动画教程