传送门

Solution

根据prufer序列做的题,具体可以看这里

还知道了一种避免高精除的方法quq

Code

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <algorithm>
  7. #define F(i,a,b) for(register int i=(a);i<=(b);i++)
  8. #define R(i,a,b) for(register int i=(b);i>=(a);i--)
  9. using namespace std;
  10. inline int read() {
  11. int x=0,f=1;char c=getchar();
  12. while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
  13. while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
  14. return x*f;
  15. }
  16. const int N=1010,D=10000;
  17. struct Bign{
  18. int da[N<<2],wei;
  19. Bign() {clear();}
  20. void out() {
  21. printf("%d",da[wei]);
  22. R(i,1,wei-1) printf("%04d",da[i]);
  23. putchar('\n');
  24. }
  25. void clear() {memset(da,0,sizeof(da));wei=0;}
  26. }ans;
  27. Bign operator*(Bign a,int b) {
  28. Bign res; res.wei=a.wei; int &wei=res.wei;
  29. F(i,1,wei) res.da[i]=a.da[i]*b;
  30. F(i,1,wei) res.da[i+1]+=res.da[i]/D,res.da[i]%=D;
  31. while(res.da[wei+1]) wei++,res.da[wei+1]=res.da[wei]/D,res.da[wei]%=D;
  32. return res;
  33. }
  34. int n,sum,cnt;
  35. int a[N],p1[N],p2[N];
  36. void get_p(int *p,int x) {
  37. int sqr=sqrt(x);
  38. F(i,2,sqr) while(x%i==0) x/=i,p[i]++;
  39. if(x>1) p[x]++;
  40. }
  41. int main() {
  42. n=read();
  43. F(i,1,n) {
  44. a[i]=read();if(a[i]==-1) continue;
  45. cnt++;sum+=a[i]-1;
  46. F(j,1,a[i]-1) get_p(p2,j);
  47. }
  48. if(sum>n-2) return putchar('0'),0;
  49. F(i,1,n-2) get_p(p1,i);
  50. F(i,1,n-2-sum) get_p(p2,i),get_p(p1,n-cnt);
  51. F(i,1,n) p1[i]-=p2[i];
  52. ans.da[1]=1;ans.wei=1;
  53. F(i,1,n) F(j,1,p1[i]) ans=ans*i;
  54. ans.out();
  55. return 0;
  56. }

[luogu2624 HNOI2008]明明的烦恼 (prufer+高精)的更多相关文章

  1. BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)

    题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...

  2. bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2248  Solved: 898[Submit][Statu ...

  3. BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5786  Solved: 2263[Submit][Stat ...

  4. bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)

    [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5907  Solved: 2305[Submit][Status][Di ...

  5. Luogu P2624 [HNOI2008]明明的烦恼 Prufer+组合+高精

    好的我把标准版过了... 设$ r_i$为$i$的度数 首先,我们设 $ sum = \Sigma r_i-1$,$ tot $ 为所有能够确定度数的点 所以我们有 $ C ^ {sum} _{n-2 ...

  6. [BZOJ1005] [HNOI2008] 明明的烦恼 (prufer编码)

    Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为N ...

  7. 【bzoj1005】[HNOI2008]明明的烦恼 Prufer序列+高精度

    题目描述 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < = 1000),接下来N行,第i+1行给出第i ...

  8. bzoj1005: [HNOI2008]明明的烦恼 prufer序列

    https://www.lydsy.com/JudgeOnline/problem.php?id=1005 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的 ...

  9. BZOJ 1005 [HNOI2008]明明的烦恼 ★(Prufer数列)

    题意 N个点,有些点有度数限制,问这些点可以构成几棵不同的树. 思路 [Prufer数列] Prufer数列是无根树的一种数列.在组合数学中,Prufer数列是由一个对于顶点标过号的树转化来的数列,点 ...

随机推荐

  1. 使用python获取CPU和内存信息的思路与实现(linux系统)

    linux里一切皆为文件,在linux/unix的根文件夹下,有个/proc文件夹,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc&qu ...

  2. jsp param动作标签

    param 标签以"名字-值"对的形式为其它标签提供附加消息.这个标签与jsp:include.jsp:forward.jsp:plugin标签一起使用. param 动作标签 & ...

  3. 王立平--java se的简单项目创建以及具体解释

    创建项目的简单步骤: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTUyNw==/font/5a6L5L2T/fontsize/400/ ...

  4. WCF学习笔记——契约不能少了set

    我定义的WCF契约里,有一个类,里面的属性,有一个因为只读,所以只写了个get.结果客户端就报错. [DataContract] public class UserItem { public User ...

  5. javase - 点餐系统

    public class OrderMsg { public static void main(String[] args) throws Exception { /** * 订餐人姓名.选择菜品.送 ...

  6. Android+Jquery Mobile学习系列(5)-SQLite数据库

    SQLite是轻量级的.嵌入式的.关系型数据库,目前已经在iPhone.Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠. 因为Android已经集成了SQLit ...

  7. Codeforces--626B--Cards(模拟)

     Cards Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  8. [Codeforces 1013B] And

    [题目链接] http://codeforces.com/problemset/problem/1013/B [算法] 不难发现,答案只有0,1,2,-1,共4种取值 分类讨论即可,计算时可以使用ST ...

  9. Python入门 六、像个 Pythonista

    pickle import pickle test_data = ['Save me!',123.456,True] f = file('test.data','w') pickle.dump(tes ...

  10. Sudoku(dfs)

    http://poj.org/problem?id=2676 填九宫格 思路:将每一行,每一列及每一个3*3块中出现的数字标记上,将可填的空的位置记录下来,枚举1-9,填入合适的数. #include ...