【题目链接】

点击打开链接

【算法】

f[i]表示深度小于等于i的严格n元树

显然,一棵深度小于等于i的严格n元树,就是一个根节点,下面有n棵子树,这n棵子树都是深度小于等于i-1的严格n元树,每棵子树有f[i-1]种形态,根据乘法原理,

可知f[i] = f[i-1] ^ n + 1

那么最后f[d] - f[d-1]就是答案

注意要用高精度计算

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 35
#define MAXL 400 int i,n,d;
struct INT
{
int len;
int num[MAXL];
} ans,f[MAXN]; inline INT add(INT x)
{
int i;
reverse(x.num,x.num+x.len);
x.num[]++;
for (i = ; i < x.len; i++)
{
if (x.num[i] >= )
{
x.num[i+]++;
x.num[i] %= ;
}
}
while (x.num[x.len]) x.len++;
reverse(x.num,x.num+x.len);
return x;
}
inline void multipy(INT &a,INT b)
{
int i,j;
static INT res;
memset(res.num,,sizeof(res.num));
reverse(a.num,a.num+a.len);
reverse(b.num,b.num+b.len);
for (i = ; i < a.len; i++)
{
for (j = ; j < b.len; j++)
{
res.num[i+j] += a.num[i] * b.num[j];
}
}
res.len = a.len + b.len - ;
while (!res.num[res.len-]) res.len--;
for (i = ; i < res.len; i++)
{
if (res.num[i] >= )
{
res.num[i+] += res.num[i] / ;
res.num[i] %= ;
}
}
if (res.num[res.len]) res.len++;
reverse(res.num,res.num+res.len);
a = res;
}
inline INT _minus(INT a,INT b)
{
static INT res;
memset(res.num,,sizeof(res.num));
reverse(a.num,a.num+a.len);
reverse(b.num,b.num+b.len);
for (i = ; i < a.len; i++)
{
if (a.num[i] >= b.num[i]) res.num[i] = a.num[i] - b.num[i];
else
{
a.num[i+]--;
res.num[i] = a.num[i] + - b.num[i];
}
}
res.len = a.len;
while (!res.num[res.len-]) res.len--;
reverse(res.num,res.num+res.len);
return res;
}
inline INT power(INT a,int n)
{
INT res;
if (!n) return (INT){,{}};
if (n == ) return a;
res = power(a,n>>);
multipy(res,res);
if (n & ) multipy(res,a);
return res;
}
inline void output(INT x)
{
int i;
for (i = ; i < x.len; i++) printf("%d",x.num[i]);
puts("");
} int main()
{ scanf("%d%d",&n,&d);
f[] = (INT){,{}};
for (i = ; i <= d; i++) f[i] = add(power(f[i-],n));
ans = _minus(f[d],f[d-]);
output(ans); return ;
}

【SCOI 2003】 严格n元树的更多相关文章

  1. BZOJ 1089 (SCOI 2003) 严格n元树

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...

  2. BZOJ 1089: [SCOI2003]严格n元树

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1591  Solved: 795[Submit][Statu ...

  3. [BZOJ1089][SCOI2003]严格n元树(递推+高精度)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...

  4. 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1089 题意:求深度为d的n元树数目.(0<n<=32, 0<=d<=16) ...

  5. bzoj 1089 [SCOI2003]严格n元树(DP+高精度)

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1250  Solved: 621[Submit][Statu ...

  6. BZOJ1089: [SCOI2003]严格n元树

    1089: [SCOI2003]严格n元树 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 762  Solved: 387[Submit][Status ...

  7. [BZOJ]1089 严格n元树(SCOI2003)

    十几年前的题啊……果然还处于高精度遍地走的年代.不过通过这道题,小C想mark一下n叉树计数的做法. Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该 ...

  8. 【bzoj1089】严格n元树

    Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d(根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严格 ...

  9. 【BZOJ1089】[SCOI2003]严格n元树(高精度,动态规划)

    [BZOJ1089][SCOI2003]严格n元树(高精度,动态规划) 题面 BZOJ 洛谷 题解 设\(f[i]\)表示深度为\(i\)的\(n\)元树个数.然后我们每次加入一个根节点,然后枚举它的 ...

随机推荐

  1. [HNOI2012] 永无乡 题解

    题意: n个点,有加边操作,询问与某一点处于相同的联通块的点中权值第k大的点 思路: 对所有点建立一棵权值线段树,加边就配合并查集进行线段树合并 反思: 动态开点,权值线段树要用sum[g[x=fin ...

  2. HDU 3062 简单的2-SAT问题

    在2-SAT,最让我纠结的还是添加有向线段的函数了 void add_clause(int i,int a,int j,int b){    int m=2*i+a;    int n=2*j+b;  ...

  3. 虫食算(codevs 1064)

    题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6 ...

  4. 【HDOJ6301】Distinct Values(贪心,set)

    题意:给定一个n个数的数列与m个区间,要求每个区间内的数字互不相同,求使得数列字典序最小的方案 n<=1e5 思路: #include<cstdio> #include<vec ...

  5. Java有几种线程池?

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixed ...

  6. XCode 或者ITune 添加账号时,提示:This action could not be completed. 或者 Access Privileges

    当遇到This action could not be completed 或者 You do not have enough access privileges for this operation ...

  7. POJ 2348 Euclid's Game【博弈】

    题目链接: http://poj.org/problem?id=2348 题意: 给定两个数,两个人每次从较大数中减去较小数的倍数,谁先得到0谁获胜,为谁赢? 分析: 令一种可能出现的整数对为(a,b ...

  8. 纯Java Web项目下的Session共享方案收集(待实践)

    1.使用filter方法存储 这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简单容易控制. 可以使用memcached-session-filter 官方网 ...

  9. 无线网卡与本地连接不能同时使用&一机多网络的优先级设置

    无线网卡与本地连接不能同时使用&一机多网络的优先级设置 2012-05-30 20:39 初次记录 2012-08-09 10:32 修订 题目中的两个问题,其实都可以归结为一个问题,即网络优 ...

  10. Windows7系统下优化固态硬盘

    一.AHCI硬盘模式可提高硬盘性能,确定你的固态硬盘是运行在AHCI模式下,打开“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servicesmsahci” ...