BZOJ 1211 树的计数
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 树的计数的更多相关文章
- BZOJ 1211 树的计数(purfer序列)
首先考虑无解的情况, 根据purfer序列,当dee[i]=0并且n!=1的时候,必然无解.否则为1. 且sum(dee[i]-1)!=n-2也必然无解. 剩下的使用排列组合即可推出公式.需要注意的是 ...
- 树的计数 Prüfer编码与Cayley公式 学习笔记
最近学习了Prüfer编码与Cayley公式,这两个强力的工具一般用于解决树的计数问题.现在博主只能学到浅层的内容,只会用不会证明. 推荐博客:https://blog.csdn.net/moreja ...
- UOJ #122 【NOI2013】 树的计数
题目链接:树的计数 这道题好神啊……正好有人讲了这道题,那么我就写掉吧…… 首先,为了方便考虑,我们可以把节点重标号,使得\(bfs\)序变成\(1,2,3,\dots,n\),那么显然树的深度就是\ ...
- 【BZOJ】【1211】【HNOI2004】树的计数
Prufer序列+组合数学 嗯哼~给定每个点的度数!求树的种数!那么很自然的就想到是用prufer序列啦~(不知道prufer序列的……自己再找找资料吧,这里就不放了,可以去做一下BZOJ1005明明 ...
- BZOJ 1211: [HNOI2004]树的计数( 组合数学 )
知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! -------------------------------------- ...
- 【BZOJ 1211】 1211: [HNOI2004]树的计数 (prufer序列、计数)
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2468 Solved: 868 Description 一 ...
- bzoj 1211: [HNOI2004]树的计数 -- purfer序列
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MB Description 一个有n个结点的树,设它的结点分别为v1, v2, ...
- BZOJ1211: [HNOI2004]树的计数
1211: [HNOI2004]树的计数 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1245 Solved: 383[Submit][Statu ...
- 【BZOJ3244】【NOI2013】树的计数(神仙题)
[BZOJ3244][NOI2013]树的计数(神仙题) 题面 BZOJ 这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\) 题解 数的形态和编号没 ...
随机推荐
- eXtremeDB
I am doing a cluster test, why did I encounter the ld errorwhen compiling the several packages from ...
- cocos2d-3.0 Helloworld::onTouchMoved的处理机制的推測
bool sign2 = true; bool sign2 = true; void GameLayer::onTouchMoved(Touch *touch, Event *unused){ if( ...
- 跨平台传输中使用base64来保证非ascii码字符串的完整性
首先,我们来看一个例子: byte[] b=new byte[]{2,9,43}; String ss=new String(b,"utf-8"); byte[] b1=ss.ge ...
- JAVA - 回调机制
参考例子:android的Button OnClickListener接口.<第一行代码>中的回调例子 定义接口 public interface HttpCallbackListen ...
- 根据goodsId获得相关商品的列表
List<Goods> goodsList = goodsDetailService.getGoodsListByproductId(productId); for (Goods good ...
- 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 ...
- php long time(1)
好久好久没有发表新的文章了,主要是懒得在这里写,都记在记事本上,所得都是自己理解的情况下写的,如今借此闲暇记录下来,:::: ****************PHP****************** ...
- mssql SUBSTRING和charindex的用法
在工作中用到的例子: select * FROM [CSGDC.DataETLDB].[dbo].[StrategiesList] where strategy_name like '%基建系统%' ...
- egrep和grep有什么区别
grep默认不支持正则表达式,egrep默认支持正则表达式,egrep 等于 grep -E 命令.
- Jenkins学习之——(3)将项目发送到tomcat
本章节将讲解如何将项目发送到tomcat,实现自动部署. 我只将一个测试的maven项目托管到github上的,不了解git获github的朋友自己百度一下,我也写了一些关于git的文章,希望大家可以 ...