描述

一个有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

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define ll long long
  4. #define rd read()
  5. using namespace std;
  6.  
  7. const int N = ;
  8.  
  9. int pri[N], tot, vis[N], n, cnt[N], sum;
  10. ll ans = ;
  11.  
  12. ll fpow(ll a, ll p) {
  13. ll re = ;
  14. for(; p; p >>= , a = a * a) if(p & ) re = re * a;
  15. return re;
  16. }
  17.  
  18. int read() {
  19. int X = , p = ; char c = getchar();
  20. for(; c > '' || c < ''; c = getchar()) if(c == '-') p = -;
  21. for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
  22. return X * p;
  23. }
  24.  
  25. void init() {
  26. for(int i = ; i < N; ++i) {
  27. if(!vis[i]) pri[++tot] = i;
  28. for(int j = ; j <= tot && pri[j] * i < N; ++j) {
  29. vis[i * pri[j]] = ;
  30. if(i % pri[j] == ) break;
  31. }
  32. }
  33. }
  34.  
  35. void cal(int x, int k) {
  36. if(!x || x == ) return;
  37. for(int i = ; i <= tot && x != ; ++i) if(x % pri[i] == ) {
  38. while(x % pri[i] == ) cnt[i] += k, x /= pri[i];
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. init();
  45. n = rd;
  46. for(int i = ; i <= n - ; ++i) cal(i, );
  47. for(int i = ; i <= n; ++i) {
  48. int x = rd;
  49. if(n != && !x) return printf("0\n"), ;
  50. if(n == && x) return printf("0\n"), ;
  51. if(n == && !x) return printf("1\n"), ;
  52. for(int j = ; j < x; ++j) cal(j, -);
  53. sum += x - ;
  54. }
  55. if(sum != n - ) return printf("0\n"), ;
  56. for(int i = ; i <= tot; ++i) ans *= fpow(pri[i], cnt[i]);
  57. printf("%lld\n", ans);
  58. }

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. selenium+python自动化94-行为事件(ActionChains)源码详解

    ActionChains简介 actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互. 这对于做更复杂的动作非常有用,比如悬停 ...

  2. [Flutter] 发布自己的插件 package

    我们自己做了插件包,当然也想发布到pub.dartlang.org上去.怎么发布呢?先看看官方的说明(https://flutter.io/developing-packages/). Publish ...

  3. 逆地址解析协议RARP

    解决的问题 一般系统启动时,从引导磁盘中获取ip 有些机器没有引导磁盘,如X终端或无盘工作站,则需要采用其他方法来获得IP地址 解决的过程 无盘系统依据RARP协议 从接口卡上读取唯一的硬件地址,然后 ...

  4. Some facts about topological sort

    Definition: a topological sort of a DAG G is a sort such that for all edge (i,j) in G, i precedes j. ...

  5. hive 下篇

    由于spark on hive 问题,导致无法插入数据,暂时使用spark进行hive操作 向分区表插入数据 hive> show partitions customers;OKpartitio ...

  6. JAVA 文件与base64之间的转化, 以及Web实现base64上传文件

    <1>文件与base64字符串之间的转化 package servlet_file_upload; import java.io.File; import java.io.FileInpu ...

  7. 4. mybatis实战教程(mybatis in action)之四:实现关联数据的查询

    转自:https://www.cnblogs.com/shanheyongmu/p/5653599.html 有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如 ...

  8. AS3 巧用事件api简化鼠标拖动流程

     拖动,按照一般人的定义,拖动就是鼠标按下的时候移动鼠标,这里面有三个过程,分别是按下.移动鼠标和弹起.以stage为例,大家的实现步骤通常如下:(PS:此处不讨论startDrag和stopDrag ...

  9. linux 安装禅道

    1. 查看Linux服务器版本信息 # cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 2. 禅道开源版安装包下载 # wge ...

  10. caffe openpose/Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields配置(转)

    Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields 是CVPR2017的一篇论文,作者称是世界上第一个基于深度学习的 ...