bzoj1005 [HNOI2008]明明的烦恼 prufer+组合数学
直接考虑prufer序列,每个度数-1就是再n-2的序列中出现的次数
对于不确定的-1,每个没有填的位置都是有可能填的,所以直接离散用乘法原理
对于确定的就是组合数选位置,注意要开高精
对于高精除法的话就使用类似exlucas的方法提取因子,最后再乘
码:
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int ans[1999999],daan[1999999],i,j,n,lin,x,wz,jw,gs[1005][1005],cnt,k;
vector<int>v[1005];
void C(int a,int b)
{int i,j;if(b-a>a){for(i=b;i>b-a;i--){for(j=0;j<v[i].size();j++)ans[v[i][j]]+=gs[i][v[i][j]]; }for(i=1;i<=a;i++){ for(j=0;j<v[i].size();j++)ans[v[i][j]]-=gs[i][v[i][j]];} }else
{for(i=b;i>a;i--){for(j=0;j<v[i].size();j++)ans[v[i][j]]+=gs[i][v[i][j]]; }for(i=1;i<=b-a;i++){ for(j=0;j<v[i].size();j++)ans[v[i][j]]-=gs[i][v[i][j]];}
}
}
int main()
{scanf("%d",&n);
for(i=1;i<=n;i++)
{int lin2=i;for(j=2;j*j<=n;j++){if(lin2%j==0){lin=0;while(lin2%j==0)lin++,lin2/=j; gs[i][j]=lin;v[i].push_back(j);} }if(lin2!=1)gs[i][lin2]=1,v[i].push_back(lin2);
}
wz=n-2;for(i=1;i<=n;i++){scanf("%d",&x);if(x!=1){ if(x==-1)++cnt;else C(x-1,wz),wz-=(x-1);}}
daan[0]=1;
daan[1]=1;
ans[cnt]+=wz;
for(i=1;i<=n;i++)
{
for(j=1;j<=ans[i];j++)
{for(k=1;k<=daan[0];k++){long long o=jw+daan[k]*i;daan[k]=o%1000;jw=o/1000; }while(jw)daan[++daan[0]]=jw%1000,jw/=1000;
}
} for(i=daan[0];i>=1;i--){if(i!=daan[0]){if(daan[i]<100)printf("0");if(daan[i]<10)printf("0"); }printf("%d",daan[i]); }
}
bzoj1005 [HNOI2008]明明的烦恼 prufer+组合数学相关推荐
- BZOJ1005 [HNOI2008]明明的烦恼
Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 ...
- BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)
题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...
- bzoj 1005: [HNOI2008]明明的烦恼(prufer数列)
1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 5171 Solved: 2021 [Submit][St ...
- BZOJ 1005: [HNOI2008]明明的烦恼
BZOJ 1005: [HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在 任意两点间连线 ...
- 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
点此看题面 大致题意: 给你某些点的度数,其余点度数任意,让你求有多少种符合条件的无根树. \(prufer\)序列 一道弱化版的题目:[洛谷2290][HNOI2004] 树的计数. 这同样也是一道 ...
- 【BZOJ 1005】[HNOI2008]明明的烦恼 【Prufer序列】
(1) 树的prufer编码的实现[1] 不断删除树中度数为1的最小序号的点,并输出与其相连的节点的序号直至树中只有两个节点 对应的prufer序列就是3,5,1,3. Data.in 6 5 1 3 ...
- 明明的烦恼(Prufer数列)
题目描述 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?
- 【BZOJ1005】【HNOI2008】明明的烦恼
[Description] 自从明明学了树的结构,就对奇怪的树产生了兴趣-- 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? [Input] 第一行为 ...
- BZOJ-1005 明明的烦恼
Prufer编码练习题,这个编码是跟树的生成计数有关系的. 推荐这篇博文:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557 ...
最新文章
- mybatis 使用resultMap实现数据库的操作
- 【 MATLAB 】【 MATLAB 】DFT的性质讨论(三)序列的循环卷积及其 MATLAB 实现
- 机器人搬运礼盒程序_礼盒厂公司2020范文
- java 基本语法与流程控制_Java基础语法之控制流程
- Spring方法注入 @Lookup注解使用
- 19年8月 字母哥 第六章 生命周期内的拦截过滤与监听 用热点公司网不行
- 阶段项目:学生信息管理系统数据库设计
- 一切事物皆对象_基础篇
- 吸顶灯怎么固定天花板_吸顶灯怎么安装?家庭圆形吸顶灯底座安装步骤(图文解说)...
- 更新 FF.PyAdmin v1.2.4
- 帆软单点登录_平台系统单点登录接口
- phpstudy的安装及pikachu渗透平台的搭建
- GNURadio(一)
- python处理考勤数据_python连接中控考勤机分析数据
- Keil RTX 系统函数 定义
- 【OpenCV C++】照片修改像素(尺寸大小)
- TensorRT学习(1):通过pth生成wts文件
- 猴子排序算法_猴子排序-有史以来最慢的排序算法?
- Spring是什么意思?
- 【51Job数据爬取日志】前程无忧URL请求字段分析
热门文章
- HTML5锤子官网,美国ESTWING 一体化锻造羊角锤 非常好用的锤子
- href up test.php,test.php
- List的isEmpty与==null的区别
- poj 1847 Tram 最短路 dijkstra、floyed
- 解决Windows下运行出现ModuleNotFoundError: No module named xxx问题
- git 上传项目到linux仓库_总结:上传python项目至git上前的一些准备工作
- myeclipse的电商系统模板_电商市场分析怎么做?3分钟了解程序员必备分析软件...
- Java中使用JNA实现全局监听Linux键盘事件
- android权限机制6.0,Android6.0权限机制(二):封装
- python指数运算函数_分享Python中用于计算指数的exp()方法实例教程