【bzoj1005】

Description

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

Input

  第一行为N(0 < N < = 1000),
接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1

Output

  一个整数,表示不同的满足要求的树的个数,无解输出0

Sample Input

3
1
-1
-1

Sample Output

2

关于prufer序列这个定理的证明,

给出大佬博客http://hzwer.com/3272.html

我这里就给一个结论

写到代码里,OK!

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<set>
#include<vector>
#include<queue>
#include<map>
#define il inline
#define re register
using namespace std;
const int N=;
int n,m,p,d[N],ans[N],chk[N],pr[N],cnt[N],tot,l;
il void filt(){
for(int i=;i<=;i++) if(!chk[i]){
pr[++tot]=i;
for(int j=i+i;j<=;j+=i)
chk[j]=;
}
}
il void add(int p,int v){
// cout<<p<<"...\n";
for(int k=;k<=p;k++){
int x=k;
for(int i=;i<=tot;i++){
if(x<=) break;
while(x%pr[i]==){
cnt[i]+=v;x/=pr[i];
}
}
}
}
il void mul(int x){
// cout<<x<<endl;
for(int i=;i<=l;i++)
ans[i]*=x;
for(int i=;i<=l;i++){
ans[i+]+=ans[i]/;
ans[i]%=;
}
while(ans[l+]>){
l++;
ans[l+]+=ans[l]/;
ans[l]%=;
}
}
int main(){
filt();
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&d[i]);
}
if(n==){
if(!d[]) cout<<'';
else cout<<'';
return ;
}
for(int i=;i<=n;i++){
if(!d[i]){
printf("");
return ;
}
if(d[i]==-) m++;
else{
d[i]--;p+=d[i];
}
}
if(p>n-){
printf("");
return ;
}
add(n-,);
add(n--p,-);
for(int i=;i<=n;i++)
if(d[i]>) add(d[i],-);
ans[]=;l=;
/* for(int i=1;i<=tot;i++)
cout<<cnt[i]<<' ';
cout<<endl;*/
for(int i=;i<=tot;i++){
for(;cnt[i];cnt[i]--)
mul(pr[i]);
}
// cout<<m<<endl;
for(int i=;i<=n--p;i++)
mul(m);
printf("%d",ans[l]);
for(int i=l-;i>=;i--)
printf("%06d",ans[i]);
return ;
}

【bzoj1430】

Description

一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友。每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友。经过N-1次打架之后,整个森林的小猴都会成为好朋友。 现在的问题是,总共有多少种不同的打架过程。 比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1-2}{2-3,1-3}六种不同的打架过程。

Input

一个整数N。

Output

一行,方案数mod 9999991。

Sample Input

4

Sample Output

96

HINT

50%的数据N<=10^3。
100%的数据N<=10^6。

【soltuion】

这不是刚刚那题的弱弱弱化版?

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<set>
#include<vector>
#include<queue>
#include<map>
#define il inline
#define re register
#define mod 9999991
using namespace std;
typedef long long ll;
int n,ans=;
int main(){
scanf("%d",&n);
for(int i=;i<=n-;i++)
ans=(ll)ans*n%mod;
for(int i=;i<n;i++)
ans=(ll)ans*i%mod;
cout<<ans;
return ;
}

我不会告诉你这篇博客只是一个刷题记录

简单prufer应用的更多相关文章

  1. ural 1069. Prufer Code

    1069. Prufer Code Time limit: 0.25 secondMemory limit: 8 MB A tree (i.e. a connected graph without c ...

  2. 树的Prufer 编码和最小生成树计数

      Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方 ...

  3. prufer序列

    介绍 其实是\(pr\ddot{u}fer\)序列 什么是prufer序列? 我们认为度数为\(1\)的点是叶子节点 有一颗无根树,每次选出编号最小的叶子节点,加到当前prufer序列的后面,然后删掉 ...

  4. prufer数列

    涨姿势---prufer数列 一. 简介 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它 ...

  5. Prufer codes与Generalized Cayley's Formula

    Prufer序列 在一棵n个节点带标号树中,我们认为度数为1的点为叶子.n个点的树的Prufer序列是经过下面流程得到的一个长度为n-2的序列. 1.若当前树中只剩下两个点,退出,否则执行2. 2.找 ...

  6. 【专题】计数问题(排列组合,容斥原理,Prufer序列)

    [容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...

  7. OI图论 简单学习笔记

    网络流另开了一个专题,所以在这里就不详细叙述了. 图 一般表示为\(G=(V,E)\),V表示点集,E表示边集 定义图G为简单图,当且仅当图G没有重边和自环. 对于图G=(V,E)和图G2=(V2,E ...

  8. [HNOI2004]树的计数 prufer数列

    题面: 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,你的程序需要输出满足d( ...

  9. 图论:Prufer编码

    BZOJ1211:使用prufer编码解决限定结点度数的树的计数问题 首先学习一下prufer编码是干什么用的 prufer编码可以与无根树形成一一对应的关系 一种无根树就对应了一种prufer编码 ...

随机推荐

  1. odoo 打印单

    <td style="word-wrap:break-word;width:20%;font-size:16"> <t t-foreach="l.pro ...

  2. hdu 1505 City Game (hdu1506加强版)

    # include <stdio.h> # include <algorithm> # include <string.h> # include <iostr ...

  3. web安全入门课程笔记——SQL漏洞分析与利用

    3-1SQL语言基础 3-2ACCESS手工注入 And1=1是什么意思:进入数据库查询信息,判断是否存在注入点. Exists(select*from admin):查询语句 3-6MySQL手工注 ...

  4. AI Summit(2018.07.19)

    AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店

  5. 20155338《网络对抗》Exp3 免杀原理与实践

    20155338<网络对抗>Exp3 免杀原理与实践 实验过程 一.免杀效果参考基准 Kali使用上次实验msfvenom产生后门的可执行文件,上传到老师提供的网址http://www.v ...

  6. POJ 1459&&3436

    两道比较基础的网络流题目,重点就是建图. 1458:题意就是给你一些东西它们的数据,其中一些是发电站,还有一些是用户的家里,其中还有一些是中转站.让你求最大的输送电量. 就是一道很基础的最大流题目,建 ...

  7. LSTM生成尼采风格文章

    LSTM生成文本 github地址 使用循环神经网络生成序列文本数据.循环神经网络可以用来生成音乐.图像作品.语音.对话系统对话等等. 如何生成序列数据? 深度学习中最常见的方法是训练一个网络模型(R ...

  8. 模拟赛 sutoringu

    sutoringu 题意: 询问有多少一个字符串内有多少个个子区间,满足可以分成k个相同的串. 分析: 首先可以枚举一个长度len,表示分成的k个长为len的串.然后从1开始,每len的长度分成一块, ...

  9. vue-router单页应用简单示例(三)

    用vue-resource向服务器请求数据 我们主要来了解一下以下内容: 模拟服务端返回数据 用vue-resource向服务器请求数据 模拟服务器返回数据   我们用vue-cli创建的项目中,已经 ...

  10. 移动端jq及zepto事件绑定

    最近做移动端网页,用到了zepto.js , 其大致用法跟 jquery 差不多,但是在时间绑定的时候被困了好久的坑. 这里说的主要是给未来元素绑定事件.未来元素:这里指的是通过 ajax 请求得到数 ...