传送门

解题思路

  \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列。做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩两个节点。然后这个东西有一个显然的性质就是所有点会在序列中出现这个点的度数\(-1\)次,这个性质有一个推论就是给你一棵树所有点的度数,你可以算出无根树不同形态的个数。公式为\(ans=\frac{(n-2)!}{\prod_{i=1}^{n}(deg[i]-1)!}\)。然后注意要质因数分解,否则中间会爆\(long long\),还要特判一些东西。

代码

#include<iostream>
#include<cstdio>
#include<cstring> using namespace std;
const int MAXN = 155;
typedef long long LL; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?x:-x;
} int n,deg[MAXN],num[MAXN],prime[MAXN],cnt,sum;
bool vis[MAXN];
LL ans=1; void solve(int x,int k){
for(int i=1;i<=cnt;i++){
while((x%prime[i]==0)) {num[i]+=k;x/=prime[i];}
if(x==1) break;
}
} int main(){
n=rd();
if(n==1) {puts(rd()==0?"1":"0");return 0;}
for(int i=1;i<=n;i++){
deg[i]=rd();sum+=deg[i];
if(!deg[i]) {puts("0");return 0;}
deg[i]--;
}
if(sum/2+1!=n) {puts("0");return 0;}
for(int i=2;i<=150;i++){
if(!vis[i]) {prime[++cnt]=i;vis[i]=1;}
for(int j=1;j<=cnt && i*prime[j]<=150;j++){
vis[i*prime[j]]=1;
if(!(i%prime[j])) break;
}
}
for(int i=2;i<=n-2;i++) solve(i,1);
for(int i=1;i<=n;i++){
if(deg[i]<=1) continue;
for(int j=2;j<=deg[i];j++) solve(j,-1);
}
for(int i=1;i<=cnt;i++)
while(num[i]--) ans*=prime[i];
printf("%lld\n",ans);
return 0;
}

最新文章

  1. Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
  2. ACM D的小L
  3. ADF_Starting系列8_使用EJB/JPA/JSF通过ADF构建Web应用程序之扩展UI Method
  4. CAST 类型转换应用
  5. This application failed to start because it could not find or load the Qt platform plugin “windows”错误解决方法
  6. Matlab找二维数组最大值
  7. 常用 VS 快捷键积累
  8. 配置Android SDK 开发环境(转)
  9. js 上一天、下一天
  10. DIV 和 SPAN 区别
  11. css中的inline-block
  12. java 将一个ip地址分割成一个数组
  13. 基于PHP的地址清洗调用案例-快宝开放平台
  14. Java虚拟机详解----JVM内存结构
  15. DAY16、模块和包
  16. Axure安装、破解、汉化全套
  17. Git .gitignore文件简介及使用
  18. Python学习资源汇总,转载自他人
  19. (BFS) leetcode 690. Employee Importance
  20. java常用技术名词解析

热门文章

  1. Linux下Qt调用共享库文件.so
  2. 日文NLP分词系统
  3. ES6-let cont 关键字
  4. [转]WPF中的导航框架
  5. leetcood学习笔记-202-快乐数
  6. __init__初始化方法
  7. jQuery-介绍 加载 选择器 样式操作 属性操作 绑定click事件
  8. 帝国cms采集关键字方法
  9. Nt函数原型
  10. (转)在Source Insight中看Python代码