http://www.lydsy.com/JudgeOnline/problem.php?id=1211

思路:每一个prufer编码都代表了一棵树,而点的度数,代表了它在prufer编码中出现的次数+1,因此,我们就知道每个点在prufer编码中出现的次数,用组合数就可以解决:

最后的式子约一下是: cnt!/(∏(du[i]-1)!)

要分解质因数,不然会爆longlong

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
ll s[];
int p[],n,du[],num[];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||''<ch){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
bool jud(int x){
for (int i=;i<=sqrt(x);i++)
if (x%i==) return ;
return ;
}
void init(){
for (int i=;i<=;i++)
if (jud(i)) p[++p[]]=i;
}
void solve(ll x,int v){
if (x==) return;
for (int i=;i<=p[];i++){
if (x<=) return;
while (x%p[i]==){
num[i]+=v;
x/=p[i];
}
}
}
int main(){
n=read();
s[]=;
s[]=;
for (int i=;i<=;i++) s[i]=s[i-]*i;
init();
ll ans=,tot=;
for (int i=;i<=n;i++){
du[i]=read(),du[i]--,tot+=du[i];
}
if (n==){
if (tot==-) puts("");
else puts("");
return ;
}
for (int i=;i<=n;i++){
if (du[i]<) {
puts("");
return ;
}
}
if (tot!=n-){
puts("");
return ;
}
solve(s[n-],);
for (int i=;i<=n;i++)
solve(s[du[i]],-);
for (int i=;i<=p[];i++)
for (int j=;j<=num[i];j++)
ans*=p[i];
printf("%lld\n",ans);
return ;
}

BZOJ 1211 树的计数的更多相关文章

  1. BZOJ 1211 树的计数(purfer序列)

    首先考虑无解的情况, 根据purfer序列,当dee[i]=0并且n!=1的时候,必然无解.否则为1. 且sum(dee[i]-1)!=n-2也必然无解. 剩下的使用排列组合即可推出公式.需要注意的是 ...

  2. 树的计数 Prüfer编码与Cayley公式 学习笔记

    最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...

  3. UOJ #122 【NOI2013】 树的计数

    题目链接:树的计数 这道题好神啊……正好有人讲了这道题,那么我就写掉吧…… 首先,为了方便考虑,我们可以把节点重标号,使得\(bfs\)序变成\(1,2,3,\dots,n\),那么显然树的深度就是\ ...

  4. 【BZOJ】【1211】【HNOI2004】树的计数

    Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明 ...

  5. BZOJ 1211: [HNOI2004]树的计数( 组合数学 )

    知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! -------------------------------------- ...

  6. 【BZOJ 1211】 1211: [HNOI2004]树的计数 (prufer序列、计数)

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2468  Solved: 868 Description 一 ...

  7. bzoj 1211: [HNOI2004]树的计数 -- purfer序列

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MB Description 一个有n个结点的树,设它的结点分别为v1, v2, ...

  8. BZOJ1211: [HNOI2004]树的计数

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1245  Solved: 383[Submit][Statu ...

  9. 【BZOJ3244】【NOI2013】树的计数(神仙题)

    [BZOJ3244][NOI2013]树的计数(神仙题) 题面 BZOJ 这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\) 题解 数的形态和编号没 ...

随机推荐

  1. eXtremeDB

    I am doing a cluster test, why did I encounter the ld errorwhen compiling the several packages from ...

  2. cocos2d-3.0 Helloworld::onTouchMoved的处理机制的推測

    bool sign2 = true; bool sign2 = true; void GameLayer::onTouchMoved(Touch *touch, Event *unused){ if( ...

  3. 跨平台传输中使用base64来保证非ascii码字符串的完整性

    首先,我们来看一个例子: byte[] b=new byte[]{2,9,43}; String ss=new String(b,"utf-8"); byte[] b1=ss.ge ...

  4. JAVA - 回调机制

    参考例子:android的Button OnClickListener接口.<第一行代码>中的回调例子   定义接口 public interface HttpCallbackListen ...

  5. 根据goodsId获得相关商品的列表

    List<Goods> goodsList = goodsDetailService.getGoodsListByproductId(productId); for (Goods good ...

  6. The requested page cannot be accessed because the related configuration data for the page is invalid

    当在VS2013下开发web site时,调试时都是在IIS Express中进行的,没有问题.当部署到IIS中,出现:The requested page cannot be accessed be ...

  7. php long time(1)

    好久好久没有发表新的文章了,主要是懒得在这里写,都记在记事本上,所得都是自己理解的情况下写的,如今借此闲暇记录下来,:::: ****************PHP****************** ...

  8. mssql SUBSTRING和charindex的用法

    在工作中用到的例子: select * FROM [CSGDC.DataETLDB].[dbo].[StrategiesList] where strategy_name like '%基建系统%' ...

  9. egrep和grep有什么区别

    grep默认不支持正则表达式,egrep默认支持正则表达式,egrep 等于 grep -E 命令.

  10. Jenkins学习之——(3)将项目发送到tomcat

    本章节将讲解如何将项目发送到tomcat,实现自动部署. 我只将一个测试的maven项目托管到github上的,不了解git获github的朋友自己百度一下,我也写了一些关于git的文章,希望大家可以 ...