Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数
最近碰了$prufer$ 序列和组合数。。于是老师留了一道题:P2624 [HNOI2008]明明的烦恼
qwq要用高精。。。
于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可还行OvO)
首先前置知识:$Prufer序列$
然后,因为对于一个$ Prufer $序列有$n-2$ 项,而每个点的度数-1是这个点在$ Prufer$ 序列中出现的次数
所以。。。这不是多重集的排列吗(不懂多重集?)
所以我们成功了一半(雾)
在计算时会爆$ long \space long $ 所以要拆分成质因数,然后去删除(反正不会T)
- #include<cstdio>
- #include<iostream>
- #define ll long long
- #define R register ll
- using namespace std;
- const int N=;
- inline int g() {
- R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
- do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
- }
- int n,m,tot,cnt;
- int r[N],num[N],pri[N];
- ll fac[],ans=;
- bool v[N];
- inline void PRI() {
- for(R i=;i<=N-;++i) {
- if(!v[i]) pri[++cnt]=i;
- for(R j=;j<=cnt&&i*pri[j]<=N-;++j) {
- v[i*pri[j]]=true; if(i%pri[j]==) break;
- }
- }
- }
- inline void calc(ll x,int vl) {
- for(R i=;i<=cnt;++i) {
- if(x==) return ;
- while(x%pri[i]==) num[i]+=vl,x/=pri[i];
- }
- }
- signed main() { PRI(); fac[]=fac[]=;
- for(R i=;i<=;++i) fac[i]=fac[i-]*i;
- n=g(); if(n==) {
- R x=g(); if(!x) printf("1\n");
- else printf("0\n");
- return ;
- } for(R i=;i<=n;++i) {
- r[i]=g(); if(!r[i]) {printf("0\n"); return ;}
- --r[i]; tot+=r[i];
- } if(tot!=n-) {printf("0\n"); return ;}
- calc(fac[n-],); for(R i=;i<=n;++i) calc(fac[r[i]],-);
- for(R i=;i<=cnt;++i) while(--num[i]>=) ans*=pri[i];
- printf("%lld\n",ans);
- }
2019.05.16
Luogu P2290 [HNOI2004]树的计数 Prufer序列+组合数的更多相关文章
- BZOJ 1211 HNOI2004 树的计数 Prufer序列
题目大意:给定一棵树中全部点的度数,求有多少种可能的树 Prufer序列.详细參考[HNOI2008]明明的烦恼 直接乘会爆long long,所以先把每一个数分解质因数.把质因数的次数相加相减.然后 ...
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
[BZOJ1005][HNOI2008]明明的烦恼 Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可 ...
- LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)
传送门 解题思路 \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列.做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩 ...
- bzoj1211: [HNOI2004]树的计数 prufer序列裸题
一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di ...
- BZOJ1211: [HNOI2004]树的计数(prufer序列)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2987 Solved: 1111[Submit][Status][Discuss] Descript ...
- [HNOI2004] 树的计数 - prufer序列
给定树每个节点的 degree,问满足条件的树的数目. \(n\leq 150, ans \leq 10^{17}\) Solution 注意特判各种坑点 \(\sum d_i - 1 = n-2\) ...
- P2290 [HNOI2004]树的计数
P2290 [HNOI2004]树的计数prufer序列模板题 #include <iostream> #include <cstdio> #include <queue ...
- P2290 [HNOI2004]树的计数(bzoj1211)
洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v ...
- 树的计数 + prufer序列与Cayley公式(转载)
原文出处:https://www.cnblogs.com/dirge/p/5503289.html 树的计数 + prufer序列与Cayley公式 学习笔记(转载) 首先是 Martrix67 的博 ...
随机推荐
- ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)
Problem Description As we know, sequence in the form of an=a1+(n−1)d is called arithmetic progressio ...
- 【LeetCode】036. Valid Sudoku
题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...
- node-webkit开发基本步骤
详情请查看:http://www.heiboard.com/?p=2091
- CentOS 配置RDP
XRDP服务器 CentOS安装XRDP实现远程桌面访问: 由于安装的是远程桌面,因此需要安装桌面显示服务:# yum install vnc-server 下面开始配置XRDP服务 l 配置环境: ...
- K-NN回归算法
from sklearn.datasets import load_iris import numpy as np import matplotlib.pyplot as plt iris = loa ...
- oracle 实现 自增主键功能
转自:https://blog.csdn.net/zxh2075/article/details/78488141 之前有一项工作是将mysql的数据库实现转移到oracle,遇到了自增主键实现的问题 ...
- centos7 firewalld使用
转 http://blog.csdn.net/jamesge2010/article/details/52449678 1.firewalld的基本使用 启动: systemctl start fir ...
- iOS开发者福利之精品源码汇总!免费下载
汇总一些看着不错的源码,有需要的朋友过来下载吧!{:4_102:} 1.用swift制作的色彩炫丽的进度条-KDCircularProgressKDCircularProgress是使用swift制作 ...
- HTTP 400 错误 编译器错误消息: CS0016
问题:运行程序时提示http 400错误 解决方法: 去掉勾 尝试将网页发布到本地IIS上,发现出现以下错误: 编译器错误消息: CS0016 解决编译器错误消息: CS0016:方法如下: 一般都是 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...