简单prufer应用
【bzoj1005】
Description
自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在
任意两点间连线,可产生多少棵度数满足要求的树?
Input
第一行为N(0 < N < = 1000),
接下来N行,第i+1行给出第i个节点的度数Di,如果对度数不要求,则输入-1
Output
一个整数,表示不同的满足要求的树的个数,无解输出0
Sample Input
1
-1
-1
Sample Output
关于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
Input
Output
Sample Input
Sample Output
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应用的更多相关文章
- ural 1069. Prufer Code
1069. Prufer Code Time limit: 0.25 secondMemory limit: 8 MB A tree (i.e. a connected graph without c ...
- 树的Prufer 编码和最小生成树计数
Prufer数列 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它可以通过简单的迭代方 ...
- prufer序列
介绍 其实是\(pr\ddot{u}fer\)序列 什么是prufer序列? 我们认为度数为\(1\)的点是叶子节点 有一颗无根树,每次选出编号最小的叶子节点,加到当前prufer序列的后面,然后删掉 ...
- prufer数列
涨姿势---prufer数列 一. 简介 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它 ...
- Prufer codes与Generalized Cayley's Formula
Prufer序列 在一棵n个节点带标号树中,我们认为度数为1的点为叶子.n个点的树的Prufer序列是经过下面流程得到的一个长度为n-2的序列. 1.若当前树中只剩下两个点,退出,否则执行2. 2.找 ...
- 【专题】计数问题(排列组合,容斥原理,Prufer序列)
[容斥原理] 对于统计指定排列方案数的问题,一个方案是空间中的一个元素. 定义集合x是满足排列中第x个数的限定条件的方案集合,设排列长度为S,则一共S个集合. 容斥原理的本质是考虑[集合交 或 集合交 ...
- OI图论 简单学习笔记
网络流另开了一个专题,所以在这里就不详细叙述了. 图 一般表示为\(G=(V,E)\),V表示点集,E表示边集 定义图G为简单图,当且仅当图G没有重边和自环. 对于图G=(V,E)和图G2=(V2,E ...
- [HNOI2004]树的计数 prufer数列
题面: 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, …, dn,你的程序需要输出满足d( ...
- 图论:Prufer编码
BZOJ1211:使用prufer编码解决限定结点度数的树的计数问题 首先学习一下prufer编码是干什么用的 prufer编码可以与无根树形成一一对应的关系 一种无根树就对应了一种prufer编码 ...
随机推荐
- 【MEVN架构】mongodb+ express + vue + nodejs 搭建后台
前端技术栈:vue2 + vuex + vue-router + webpack + ES6/7 + less + element-ui 服务端技术栈:nodejs + express + mongo ...
- mfc CIPAddressCtrl控件
知识点: CIPAddressCtrl 属性 CIPAddressCtrl 成员函数 成员函数代码测试 一.CIPAddressCtrl Class Members IsBlank Determine ...
- mfc CListBox
通过ID操作对象 CListBox(列表框)控件 CListBox类常用成员 CListBox插入数据 CListBox删除数据 CListBox运用示例 一.CListBox类常用成员 CListB ...
- 5.Xilinx RapidIO核例子工程源码分析
https://www.cnblogs.com/liujinggang/p/10091216.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:V ...
- 一步一步来熟悉Akka.Net(一)
一步一步来熟悉Akka.Net(一) 标签(空格分隔): .netcore 分布式 一.不利flag 好久没写过文章了,翻开前几年写的博客,看到有两个目标"代码生成器"和&qu ...
- 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总
教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...
- BLCR技术初探
BLCR技术到底是什么技术?我没空和你乱扯,自己去看该官方网站的介绍:http://crd.lbl.gov/groups-depts/ftg/projects/current-projects/BLC ...
- OpenStack与OpenDaylight的对接过程
由于项目中需要使用OpenDaylight(Oxygen)替换OpenStack(Otaca)中的neutron-openvswitch-agent,能找到的一些资料都是比较旧的版本,官网上的文档也一 ...
- NodeMCU学习(四):与其他设备通信
TCP连接 TCP是计算机网络中运输层协议,是应用层协议http协议的支撑协议.两台远程主机之间可以通过TCP/UDP协议进行通信并交换信息,前提是,相互通信的两台主机之间必须知道彼此的IP地址和端口 ...
- 博客目录 Blog directory
Linux 学习笔记 Linux/Mac 挂载远程服务器目录到本地 --Mount remote server directory to local PC 远程连接服务器端Jupyter Notebo ...