Description

Vasya’s dad is good in maths. Lately his favorite objects have been "beautiful" directed graphs. Dad calls a graph "beautiful" if all the following conditions are true:

  • The graph contains exactly \(N\) vertices and \(N−1\) edges.
  • Exactly one vertex has no entering edges.
  • The graph contains no directed cycles.

Dad calls two "beautiful" graphs isomorphic, if the vertices of the first graph can be renumbered in such way that it turns into the second one.

Dad picks an integer \(N\), stocks up blank paper, and draws a "beautiful" graph on each sheet. He verifies that no two drawn graphs are isomorphic.

Given the number \(N\), you are to find the number of sheets that Vasya's dad has to stock up.

Input

Input contains the single integer \(N (1 \le N \le 50)\).

Output

Output the number of "beautiful" graphs with \(N\) vertices.

Sample Input

3

Sample Output

9

题目大意——求\(N\)个点有标号的有根树的数目是多少。

假设\(a_n\)是\(n\)个点的无标号有根树的数目,则有以下的公式:

\[a_n = \sum_{\sum_{i = 1}^{n-1}}[\prod_{k=1}^{n-1}\binom{a_k+c_k-1}{c_k}]
\]

其中\(c_k\)表示根节点的子树中大小为\(i\)的子树有多少个。

为什么是\(\binom{a_k+c_k-1}{c_k}\),这是个可重组合公式。我们可以这样考虑,我们现在有\(a_k\)中子树可以选,我们可以从中选出\(c_k\)个。那么我们相当于$$\sum_{i = 1}^{a_k}x_i = c_k$$的非负整数解的方案数。也就等价于

\[\sum_{i = 1}^{a_k}x_i = c_k+a_k$$的正整数解的方案数。使用隔板法,不难得出公式
$$\binom{a_k+c_k-1}{a_k-1} = \binom{a_k+c_k-1}{c_k}\]

再用下乘法原理,上述公式就得证了。但是复杂度太高,虽然打表依旧可过。然后我们可以利用生成函数优化公式(母函数),然而这一块我们看懂。wtz说了用了很高深的解析组合的公式。希望以后学了后我能够看懂,先记在这里。

设$$A(x) = \sum_{n = 0}{\infty}a_nxn$$

基于上述分析可以迅速(tm那里迅速了)得到

\[A(x) = x \times e^{\sum_{r = 1}^{\infty}A(x^r)}
\]

于是就可推导出

\[a_{n+1} = \frac{1}{n} \times \sum_{i = 1}^n(i \times a_i \times \sum_{j=1}^{\lfloor n/i \rfloor}a_{n+1-i \times j})
\]

wtz还告诉了我假如树无根,那么也有公式:

  • 当\(n\)是奇数时,答案为$$a_n-\sum_{1 \le i \le \frac{n}{2}}a_ia_{n-i}$$
  • 当\(n\)是偶数时,答案为$$a_n-\sum_{1 \le i \le n}a_ia_{n-1}+\frac{1}{2}a_{\frac{n}{2}}(a_{\frac{n}{2}}+1)$$

然后我就用java(因为要高精度)对着公式打,就ac了。

import java.math.*;
import java.util.*;
public class Main
{
static final int maxn = 55;
static BigInteger A[] = new BigInteger[maxn]; static int N;
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
N = cin.nextInt();
A[1] = BigInteger.valueOf(1);
A[2] = BigInteger.valueOf(1);
A[3] = BigInteger.valueOf(2);
for (int n = 3;n < N;++n)
{
A[n+1] = BigInteger.ZERO;
for (int i = 1;i <= n;++i)
{
BigInteger res; res = BigInteger.ZERO;
for (int j = 1;j <= n/i;++j) res = res.add(A[n+1-i*j]);
A[n+1] = A[n+1].add(res.multiply(A[i]).multiply(BigInteger.valueOf(i)));
}
A[n+1] = A[n+1].divide(BigInteger.valueOf(n));
}
System.out.println(A[N]);
}
}

Ural1387 Vasya's Dad的更多相关文章

  1. Milliard Vasya's Function-Ural1353动态规划

    Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning mathematician. He decided to make ...

  2. CF460 A. Vasya and Socks

    A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  3. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  4. Codeforces Round #281 (Div. 2) D. Vasya and Chess 水

    D. Vasya and Chess time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分

    C. Vasya and Basketball time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. codeforces 676C C. Vasya and String(二分)

    题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...

  7. Where is Vasya?

    Where is Vasya? Vasya stands in line with number of people p (including Vasya), but he doesn't know ...

  8. Codeforces Round #324 (Div. 2) C. Marina and Vasya 贪心

    C. Marina and Vasya Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/584/pr ...

  9. Codeforces Round #322 (Div. 2) A. Vasya the Hipster 水题

    A. Vasya the Hipster Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/p ...

随机推荐

  1. linux系统下搭建自己的web服务器

    之前在windows 2008 server上搭建了一个用于测试的web服务器,但是在打开网站的时候特别的慢,尤其是图片的加载都会失败,当时以为是路径的问题,但是在服务器上自己打开都特别慢,自己实在找 ...

  2. FastDFS详解

    1.FastDFS是什么 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过 专有API对文件进行存取访问 ...

  3. 兼容IE6/IE7/IE8/FireFox的css hack

    兼容IE6/IE7/IE8/FireFox的css hack .color{ background-color: #CC00FF; background-color: #FF00009; *backg ...

  4. Linux的僵尸进程产生原因及解决方法

    Linux的僵尸进程产生原因及解决方法: 1. 产生原因: 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.通过ps命令查看 ...

  5. AppWidgetProvider生命周期

    1.在桌面上添加小部件,让小部件可用会调用:onEnabled 2.作为通知会调用onReceive 3.小部件可用后会调用onUpdate,表明小部件状态由不可用变为可用发生了变化 4.作为通知又会 ...

  6. Java内存溢出的详细解决方案

    本文介绍了Java内存溢出的详细解决方案.本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误.作者分析了JVM内存区域组成及JVM设置虚拟内存 ...

  7. ASP.NET生成日历

    public string GetDayList(DateTime? date) { ; var minDate = Convert.ToDateTime(((DateTime)(date ?? Da ...

  8. 【小丸类库系列】Excel操作类

    using Microsoft.Office.Interop.Excel; using System; using System.IO; using System.Reflection; namesp ...

  9. C语言的奇技

    1.一个整型变量/字面值常量通常足够大,可以同时表示几个字符,所以有的C编译器允许字符常量/char及整型常量有多个字符.这表明当用' yes' 替代" yes" 时可能不会被发现 ...

  10. 模板:使用new delete 创建二维数组

    int **arr_matrix = new int*[n]; ; i < n; ++i) arr_matrix[i] = new int[n]; //内容 ; i < n; ++i) d ...