描述

一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。

题解

每颗树都对应以中prufer数列, prufer数列中数出现的个数 $=$ 节点的度数 -1

所以变成了求再prufer数列中, $x$出现次数为$c_x$ 的排列数

答案为$!(N - 2) / \prod\limits_{i = 1}^N{a_i-1}$

直接算会爆LL, 需要分解质因数

另外还需要特判

代码

我发现打了个错误程序,由于某B姓OJ数据太水竟然过了。。。这个是错误的→_→,幸好发现了, 不然要出锅QAQ

 #include<cstdio>
#include<algorithm>
#define ll long long
#define rd read()
using namespace std; const int N = ; int pri[N], tot, vis[N], n, cnt[N], sum;
ll ans = ; ll fpow(ll a, ll p) {
ll re = ;
for(; p; p >>= , a = a * a) if(p & ) re = re * a;
return re;
} int read() {
int X = , p = ; char c = getchar();
for(; c > '' || c < ''; c = getchar()) if(c == '-') p = -;
for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
return X * p;
} void init() {
for(int i = ; i < N; ++i) {
if(!vis[i]) pri[++tot] = i;
for(int j = ; j <= tot && pri[j] * i < N; ++j) {
vis[i * pri[j]] = ;
if(i % pri[j] == ) break;
}
}
} void cal(int x, int k) {
if(!x || x == ) return;
for(int i = ; i <= tot && x != ; ++i) if(x % pri[i] == ) {
while(x % pri[i] == ) cnt[i] += k, x /= pri[i];
}
} int main()
{
init();
n = rd;
for(int i = ; i <= n - ; ++i) cal(i, );
for(int i = ; i <= n; ++i) {
int x = rd;
if(n != && !x) return printf("0\n"), ;
if(n == && x) return printf("0\n"), ;
if(n == && !x) return printf("1\n"), ;
for(int j = ; j < x; ++j) cal(j, -);
sum += x - ;
}
if(sum != n - ) return printf("0\n"), ;
for(int i = ; i <= tot; ++i) ans *= fpow(pri[i], cnt[i]);
printf("%lld\n", ans);
}

BZOJ 1211[HNOI2004]树的计数 - prufer数列的更多相关文章

  1. BZOJ 1211 HNOI2004 树的计数 Prufer序列

    题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后 ...

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

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

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

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

  4. [HNOI2004]树的计数 prufer数列

    题面: 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,你的程序需要输出满足d( ...

  5. 【刷题】BZOJ 1211 [HNOI2004]树的计数

    Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...

  6. bzoj 1211: [HNOI2004]树的计数

    prufer的应用.. 详细见这篇博客:https://www.cnblogs.com/dirge/p/5503289.html import java.math.BigInteger; import ...

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

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

  8. bzoj1211: [HNOI2004]树的计数 prufer编码

    题目链接 bzoj1211: [HNOI2004]树的计数 题解 prufer序 可重排列计数 代码 #include<bits/stdc++.h> using namespace std ...

  9. Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数

    最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...

随机推荐

  1. noip 2011 选择客栈

    题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...

  2. 记录——node-mysql连接池遇到的全局变量问题

    记录一个折腾了快2个小时的BUG,目前还不清楚原理. 系统分别在阿里云(测试用).XL服务器上部署,此次BUG所在功能模块为生成表格并下载,表格数据由120(阿里云)上的数据库提供. 阿里云上一切正常 ...

  3. 用python登录远程salt,并执行命令

    用python操作saltstack,如果是在本地,则可以用python的salt模块,但如果要操作远程saltstack,则不行,今天就来看看怎么操作. 用python操作远程的saltstack, ...

  4. python入门-IF语句

    1 格式 cars = ['audi','bmw','subaru','toyata'] for car in cars: if car =='bmw': print(car.upper()) els ...

  5. 1.line (线)

    1.横线 HTML代码: 横线(水平线) <hr/> <div class="row"> 横线(盒子上边框线) </div> CSS代码: .r ...

  6. 0_Simple__simpleTexture + 0_Simple__simpleTextureDrv

    使用纹理引用来旋转图片,并在使用了静态编译和运行时编译两种环境. ▶ 源代码:静态编译 #include <stdio.h> #include <windows.h> #inc ...

  7. 0_Simple__simpleCooperativeGroups

    ▶ 协作组,CUDA9.0 的新特性 ▶ 源代码,如何获得协作组的编号? #include <stdio.h> #include "cuda_runtime.h" #i ...

  8. 16. orcle中replace的用法及例子

    replace 函数用法如下: replace('将要更改的字符串','被替换掉的字符串','替换字符串'); 例子: select  replace ('1,2,3',',',';') from d ...

  9. 3. HashMap和JSONObject用法

    <%@page import="net.sf.json.JSONObject"%><%@page import="java.util.List" ...

  10. 3.为什么要使用struts2代替struts1.x

    转自:https://blog.csdn.net/li15365002374/article/details/9166431?utm_source=blogxgwz1 (1)struts2的execu ...