HNOI2004 树的计数 | HNOI2008 明明的烦恼
题目链接:戳我
prufer序列的问题。
prufer序列和无根树是一一对应的。而且在树中度数为k的点,在prufer序列中的出现次数为\(k-1\)次。
根据有限制次数的可重复元素的排列计数公式,我们可以知道答案是\(\frac{(n-2)!}{(du[1]-1)\times (du[2]-1)\times ... \times (du[n]-1)}\)
因为乘法中间可能会爆long long,所以采用分解质因数的方式。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
#define MAXN 100010
using namespace std;
int n,m,tot,cnt;
int d[MAXN],num[MAXN],prime[MAXN];
long long ans=1;
long long s[MAXN];
inline bool check(int x)
{
for(int i=2;i<=sqrt(x);i++)
if(x%i==0) return false;
return true;
}
inline void get_prime()
{
for(int i=2;i<=150;i++)
if(check(i))
prime[++cnt]=i;
}
inline void solve(long long x,int f)
{
for(int i=1;i<=cnt;i++)
{
if(x<=1) return;
while(x%prime[i]==0)
num[i]+=f,x/=prime[i];
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
s[1]=1;
for(int i=2;i<=22;i++) s[i]=s[i-1]*i;
get_prime();
scanf("%d",&n);
if(n==1)
{
int x;
scanf("%d",&x);
if(!x) printf("1\n");
else printf("0\n");
return 0;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&d[i]);
if(!d[i]){printf("0\n");return 0;}
d[i]--;
tot+=d[i];
}
if(tot!=n-2){printf("0\n");return 0;}
solve(s[n-2],1);
for(int i=1;i<=n;i++) solve(s[d[i]],-1);
for(int i=1;i<=cnt;i++)
while(num[i]--)
ans*=prime[i];
printf("%lld\n",ans);
return 0;
}
这个题是明明的烦恼的弱化版。
不过如果会做这个题,应该也会做那个题了。
现在我们只知道cnt个点的最终度数,我们假设\(sum=\sum_{i=1}^n (du[i]-1)\)那么现在的prufer序列的种类数应该是\(C_{n-2}^{sum}\times \frac{sum!}{\prod_{i=1}^{cnt} (du[i]-1)!}\)
而剩下来还有\(n-2-sum\)个位置,每个位置都可以填入除了cnt这些点的其他所有点,所以刚才的式子乘上一个\((n-cnt)^{n-2-sum}\)就行了。
HNOI2004 树的计数 | HNOI2008 明明的烦恼的更多相关文章
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
[BZOJ1005][HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可 ...
- bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2248 Solved: 898[Submit][Statu ...
- 【算法】Prüfer编码 —— HNOI2004树的计数
的确,如果不知道这个编码的话的确是一脸懵逼.在这里放一篇认为讲的很详细的 BLOG,有关于编码的方式 & 扩展在里面都有所提及. 欢迎点此进入 --> 大佬的博客 在这里主要想推导一下最 ...
- Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数
最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...
- 「BZOJ1005」[HNOI2008] 明明的烦恼
「BZOJ1005」[HNOI2008] 明明的烦恼 先放几个prufer序列的结论: Prufer序列是一种对有标号无根树的编码,长度为节点数-2. 具体存在无根树转化为prufer序列和prufe ...
- [HNOI2008]明明的烦恼(prufer序列,高精度,质因数分解)
prufer序列 定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 描述 eg 将 ...
- BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
- bzoj1005 [HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3032 Solved: 1209 Description ...
- 【bzoj1005】[HNOI2008]明明的烦恼
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4175 Solved: 1660[Submit][Stat ...
随机推荐
- css多种方式实现等宽布局
本文讲的等宽布局是在不手动设置元素宽度的情况下,使用纯css实现各个元素宽度都相当的效果. 1.使用table-cell实现(兼容ie8) <style> body,div{ margin ...
- SharePoint 创建页面布局
一.前言 文章成体系,如果有不明白的地方请查看前面的文章. 二.目录 1.创建页面布局 2.首次使用页面布局 3.修改页面布局 4.使用页面布局 5.最终效果 1.创建页面布局 (1)打开设计管理器, ...
- centos配置vsftpd服务2
ftp搭建 一.搭建前提a.ssh服务已经开启,b.防火墙关闭,c.连网1.查看ssh和防火墙的状态 service sshd status service iptables status 2.开启s ...
- js判断浏览器内核如果是ie弹出提示非ie不进行任何操作
如上做一个弹出框针对ie兼容 // 获取IE版本 function IEVersion() { // 取得浏览器的userAgent字符串 var userAgent = navigator.user ...
- echart tooltip问题(鼠标放上去显示所有和显示当个)
先看效果 两种方式只要修改一下 echat option里面tooltip的属性即可 第一种: tooltip : { show: true, trigger: 'item' // trigger: ...
- Sql Server 导出数据库表结构的SQL查询语句
--导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...
- PL/SQL Developer -> 下载 -> 安装 ->执行SQL -> 设置本地/远程连接
一 下载 点击进入 https://www.allroundautomations.com/bodyplsqldevreg.html 二 安装 4wkf7lzcb8amvke2rzeuclnk5emc ...
- 记录--js中出现的数组排序问题
这是今天在写vue项目时发生的一个小问题,在此记录一下,方便自己的回顾.项目是前后端分离的,前台主要使用了vue-cli3.0 + mintui,是一个移动端的web app包括了后台发布管理的一些功 ...
- Samba Server 的使用者帳號及密碼備份
Samba Server 自從 3.x 後改成使用 tdbsam 的方式來管理使用者的帳號及密碼,原本的帳號密碼都是存放在 /etc/samba 目錄之下,最近要做備份時,一時之間竟然找不到 Samb ...
- mybatis框架中 #和$传递参数的区别 和注意
#{}: 1. 是预编译 2. 编译成占位符 3. 可以防止sql注入 4. 自动判断数据类型 5. 一个参数时,可以使用任意参数名称进行接收 ${}: 1. 非预编译 2. sql的直 ...