bzoj1211: prufer序列 | [HNOI2004]树的计数

时间:2022-10-14 11:40:26

题目大意:

告诉你树上每个节点的度数,让你构建出这样一棵树,问能够构建出树的种树

这里注意数量为0的情况,就是

当 n=1时,节点度数>0

n>1时,所有节点度数相加-n!=n-2 可以通过通过除了根,必然有n-1个节点作为上一个节点的儿子来理解

然后通过学习prufer序列可知

每一颗树都能够建成唯一的序列,这里的n-2个数就是任意插入到prufer序列中,这很明显就是一个排列,那么之后就是计算

ans = (n-2)!/(w[1]!*w[2]!..w[n]!) w[i]表示i节点上的度数减1,或者理解为以最大的点n作为根,i有多少个儿子节点。

这里不取模,防止值溢出,要分解质因数

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
#define pii pair<int,int>
int n , w[] , num[];
vector<pii> v[]; void solve(int m)
{
if(m==) return;
int tmp = m;
for(int i= ; i<=m ; i++){
if(m%i==){
int cnt = ;
while(m%i==){
m/=i;
cnt++;
}
v[tmp].push_back(make_pair(i , cnt));
}
}
if(m>) v[tmp].push_back(make_pair(m , ));
// for(int i=0 ; i<v[tmp].size() ; i++) cout<<v[tmp][i].first<<" "<<v[tmp][i].second<<endl;
}
void init()
{
for(int i= ; i<= ; i++) solve(i);
}
void update(int k , int flag)
{
for(int i= ; i<v[k].size() ; i++){
pii u=v[k][i];
num[u.first]+=u.second*flag;
}
}
void mul(long long &ans , int k , int tim)
{
for(int i= ; i<=tim ; i++) ans=ans*k;
}
int main()
{
// freopen("Sweet.in" , "r" , stdin);
init();
while(~scanf("%d" , &n)){
memset(num , , sizeof(num));
int sum= , flag=true;
for(int i= ; i<=n ; i++){
scanf("%d" , &w[i]);
if(n!= && w[i]<) flag=false;
if(n== && w[i]!=) flag=false;
w[i]--;
sum+=w[i];
for(int j= ; j<=w[i] ; j++) update(j , -);
}
if((n>&&sum!=n-) || flag==false){
cout<<<<endl;
continue;
}
for(int i= ; i<=n- ; i++) update(i , );
long long ans = ;
for(int i= ; i<=n- ; i++){
if(num[i]) mul(ans , i , num[i]);
}
cout<<ans<<endl;
}
return ;
}

bzoj1211: prufer序列 | [HNOI2004]树的计数的更多相关文章

  1. Prufer序列与树的计数(坑)

    \(prufer\)序列: 无根树转\(prufer\)序列: 不断找编号最小的叶子节点,删掉并在序列中加入他相连的节点. \(prufer\)转无根树: 找到在目前\(prufer\)序列中未出现且 ...

  2. bzoj1211&colon; &lbrack;HNOI2004&rsqb;树的计数(prufer序列&plus;组合数学)

    1211: [HNOI2004]树的计数 题目:传送门 题解: 今天刚学prufer序列,先打几道简单题 首先我们知道prufer序列和一颗无根树是一一对应的,那么对于任意一个节点,假设这个节点的度数 ...

  3. 【BZOJ 1211】 1211&colon; &lbrack;HNOI2004&rsqb;树的计数 (prufer序列、计数)

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2468  Solved: 868 Description 一 ...

  4. bzoj1211&colon; &lbrack;HNOI2004&rsqb;树的计数 prufer编码

    题目链接 bzoj1211: [HNOI2004]树的计数 题解 prufer序 可重排列计数 代码 #include<bits/stdc++.h> using namespace std ...

  5. Luogu P2290 &lbrack;HNOI2004&rsqb;树的计数 Prufer序列&plus;组合数

    最近碰了$prufer$ 序列和组合数..于是老师留了一道题:P2624 [HNOI2008]明明的烦恼 qwq要用高精... 于是我们有了弱化版:P2290 [HNOI2004]树的计数(考一样的可 ...

  6. prufer BZOJ1211&colon; &lbrack;HNOI2004&rsqb;树的计数

    以前做过几题..好久过去全忘了. 看来是要记一下... [prufer] n个点的无根树(点都是标号的,distinct)对应一个 长度n-2的数列 所以 n个点的无根树有n^(n-2)种 树 转 p ...

  7. BZOJ1211&colon; &lbrack;HNOI2004&rsqb;树的计数

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1245  Solved: 383[Submit][Statu ...

  8. P2290 &lbrack;HNOI2004&rsqb;树的计数(bzoj1211)

    洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v ...

  9. bzoj 1211&colon; &lbrack;HNOI2004&rsqb;树的计数 -- purfer序列

    1211: [HNOI2004]树的计数 Time Limit: 10 Sec  Memory Limit: 162 MB Description 一个有n个结点的树,设它的结点分别为v1, v2, ...

随机推荐

  1. 500lines项目简介

    "500行或更少" "What I cannot create, I do not understand." -- Richard Feynman <50 ...

  2. 关于Android LinearLayout添加分隔线的方法

    目前了解的办法有两个:1.自定义一个view当作分隔线:2.使用高版本的分隔线属性 一.在需要添加分隔线的地方,添加一个view,比如ImageView,TextView等都可以,如代码,关键是设置高 ...

  3. Android N安装apk报错:android&period;os&period;FileUriExposedException

    *: http://*.com/questions/38200282/android-os-fileuriexposedexception-file-s ...

  4. Linux 新系统个人配置

    1,装codeblocks 2,装vim,检查gcc,g++,修改vim环境 cd ~vim  .vimrc添加如下几行:set shiftwidth=4          (表示每一级缩进的长度)s ...

  5. 持续集成之 Spring Boot 实战篇

    本文作者: CODING 用户 - 何健 这次实战篇,我们借助「CODING 持续集成」,实现一个简单的 Spring Boot 项目从编码到最后部署的完整过程.本教程还有 B 站视频版,帮助读者更好 ...

  6. HUSTOJ:Transit Tree Path

    问题 D: Transit Tree Path   You are given a tree with N vertices.Here, a tree is a kind of graph, and ...

  7. Spring &commat;Value取值为null或&commat;Autowired注入失败

    @Value 用于注入.properties文件中定义的内容 @Autowired 用于装配bean 用法都很简单,很直接,但是稍不注意就会出错.下面就来说说我遇到的问题. 前两天在项目中遇到了一个问 ...

  8. Educational Codeforces Round 36

    A. Garden 题目链接:http://codeforces.com/contest/915/problem/A 题意:N个花洒,每个花洒浇花有一定的范围,现在有面积为K的花园,从N个花洒中选一个 ...

  9. xsyProblem A&colon; 密集子图&lpar;graph&rpar;

    f[i][S]三进制压缩表示最长路为i,0代表不在该集合,1代表不是最短路为i集合,2代表是最短路集合, 转移枚举i+1集合是那些, 乘以概率即可 预处理保证复杂度 #include<cstdi ...

  10. Add-Migration &colon; 无法将&OpenCurlyDoubleQuote;Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    解决办法: PM>Import-Module C:\Users\Administrator.MACKJON\.nuget\packages\entityframework\6.2.0\tools ...