BZOJ 1005: [HNOI2008]明明的烦恼(高精度+prufer序)
解题思路
看到度数和生成树个树,可以想到$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;
}
												
											BZOJ 1005: [HNOI2008]明明的烦恼(高精度+prufer序)的更多相关文章
- BZOJ 1005: [HNOI2008]明明的烦恼(prufer数列)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1005 题意: Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标 ...
 - BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)
		
题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...
 - BZOJ 1005 [HNOI2008]明明的烦恼 (Prufer编码 + 组合数学 + 高精度)
		
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5786 Solved: 2263[Submit][Stat ...
 - 【BZOJ 1005】 1005: [HNOI2008]明明的烦恼 (prufer数列+高精度)
		
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4981 Solved: 1941 Description ...
 - bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数
		
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2248 Solved: 898[Submit][Statu ...
 - BZOJ 1005: [HNOI2008]明明的烦恼( 组合数学 + 高精度 )
		
首先要知道一种prufer数列的东西...一个prufer数列和一颗树对应..然后树上一个点的度数-1是这个点在prufer数列中出现次数..这样就转成一个排列组合的问题了.算个可重集的排列数和组合数 ...
 - BZOJ 1005 [HNOI2008]明明的烦恼  purfer序列,排列组合
		
1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少 ...
 - BZOJ 1005: [HNOI2008]明明的烦恼 Purfer序列 大数
		
1005: [HNOI2008]明明的烦恼 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
 - bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)
		
[HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5907 Solved: 2305[Submit][Status][Di ...
 
随机推荐
- Vue-Router原理
			
Hash 与 History 路由原理 实现路由 /** * 1.前端路由与后端路由的区别 后端路由: 输入url => 请求发送到服务器 => 服务器解析请求路径 => 拿到对应页 ...
 - BUUCTF | [HCTF 2018]admin
			
首先爬一遍整个网站,发现有没注册的时候有“login”,"register",这两个页面,注册一个123用户登录后发现有 "index“,”post“,”logout“, ...
 - 15 个最佳 jQuery 翻书效果插件
			
本文为你带来15个非常实用的.实现类似翻书效果的jQuery插件,你可以很容易地整合到你的web应用中,提升用户体验. 1. BookBlock BookBlock可以将任何内容(如图像.文本)创建 ...
 - The Tree-planting Day and Simple Disjoint Sets
			
First I have to say: I have poor English. I am too young, too simple, sometimes naïve. It was tree-p ...
 - [CSP-S模拟测试]:Endless Fantasy(DFS)
			
题目描述 中二少年$cenbo$幻想自己统治着$Euphoric\ Field$.由此他开始了$Endless\ Fantasy$.$Euphoric\ Field$有$n$座城市,$m$个民族.这些 ...
 - Docker容器数据卷volumes-from
			
定义4个终端: 终端host终端container dc01终端container dc02终端container dc03各个容器之间的关系: 1.启动一个父容器dc01启动一个父容器dc01,并在 ...
 - 3.tensorflow——NN
			
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data numClasses=10 inp ...
 - 支付宝PC端接入PHP
			
引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $orde ...
 - 使用matplotlib画出log的图像
			
以下内容是学习笔记,若有侵权,立即删除! import math import matplotlib.pyplot as plt import numpy as np if __name__ == ' ...
 - 转  : jconsole 和jvisualVM 监控远程 spring boot程序
			
监控java 程序 增加启动参数 java \ -Djava.rmi.server.hostname=192.168.2.39 \ -Dcom.sun.management.jmxremote \- ...