传送门

解题思路

  看到度数和生成树个树,可以想到$prufer$序,而一张规定度数的图的生成树个数为$\frac{(n-2)!}{\prod\limits_n(d(i)-1)!}$。而这道题有的度数没有限制,那就设有度数限制的点的个数为$num$,$\sum (d_i-1)$为$sum$。把这些点先填入$prufer$序中,其余没有限制的点可以随便填,再乘上组合数,答案应该为$C(n-2,sum)\frac{(sum!}{\prod (d_i-1)!}(n-cnt)\(,把组合数展开得\)\frac{(n-2)!}{(n-2-sum)!*\prod(d_i-1)!} *(n-cnt)^$。避免写高精除,可以把他们质因数分解,然后高精乘。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int N=6005; int n,prime[N],cnt,d[N],tot[N],sum;
bool vis[N]; struct bign{
int a[N],len;
bign mul(bign A,int B){
for(int i=1;i<=A.len;i++) A.a[i]*=B;
for(int i=1;i<=A.len;i++)
A.a[i+1]+=A.a[i]/10,A.a[i]%=10;
while(A.a[A.len+1]) {
A.len++; A.a[A.len+1]+=A.a[A.len]/10;
A.a[A.len]%=10;
}
return A;
}
}ANS; inline void prework(){
for(int i=2;i<=1000;i++){
if(!vis[i]) prime[++cnt]=i;
for(int j=1;j<=cnt && i*prime[j]<=1000;j++)
vis[i*prime[j]]=1;
}
} inline void work(int x,int k){
for(int i=1;i<=cnt;i++){
if(prime[i]>x) return ;
while(!(x%prime[i])) tot[i]+=k,x/=prime[i];
}
} int main(){
scanf("%d",&n); prework(); int num=0;
for(int i=2;i<=n-2;i++) work(i,1);
for(int i=1;i<=n;i++) {
scanf("%d",&d[i]);
if(d[i]==-1) continue;
sum+=d[i]-1; num++;
for(int j=2;j<d[i];j++) work(j,-1);
}
for(int i=2;i<=n-2-sum;i++) work(i,-1);
work(n-num,n-2-sum); ANS.len=1; ANS.a[1]=1;
for(int i=1;i<=cnt;i++)
while(tot[i]--) ANS=ANS.mul(ANS,prime[i]);
for(int i=ANS.len;i;i--) printf("%d",ANS.a[i]);
return 0;
}

最新文章

  1. pure virtual function call
  2. wxPython入门练习代码 一
  3. asp.net使用控件datagrid实现表头单元格合并
  4. HTML5拓扑图形组件设计之道(一)
  5. POJ 3034 Whac-a-Mole
  6. delphi中Message消息的使用方法
  7. 写CSS的布局
  8. UI开发中的Unit test新工具:网页抓屏比较
  9. CSS之shasow(阴影)
  10. Android 百度地图API(01)_开发环境 HelloBaiduMap
  11. JAVA循环依赖
  12. UEFI启动视频详解:启动分析+N项操作实例
  13. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
  14. android的Binder通信机制java层浅谈-android学习之旅(88)
  15. day19面向对象 , 用户注册和登录
  16. 【SQL】SQL中on条件与where条件的区别
  17. 网络(socket)编程
  18. Centos7 安装Nginx 防火墙开放80端口给外网访问
  19. anglarjs1.6.3+owin 实现验证之一:统一拒绝非登录访问。
  20. imu_tk标定算法原理

热门文章

  1. HDU 6121 Build a tree —— 2017 Multi-University Training 7
  2. 【Flutter学习】基本组件之弹窗和提示(SnackBar、BottomSheet、Dialog)
  3. Alex and Number
  4. java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常(转)
  5. poj-1021--2D-Nim--点阵图同构
  6. spring4.1.8扩展实战之三:广播与监听
  7. Python笔记(八)_内部函数与闭包
  8. [题解]Shorten IPv6 Address-模拟(2019牛客多校第六场B题)
  9. 搜索的应用--计算最优解:Aizu - ALDS1_4_D Allocation
  10. 继承Process类,run函数的简单使用