Ural1387 Vasya's Dad
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\)个点的无标号有根树的数目,则有以下的公式:
\]
其中\(c_k\)表示根节点的子树中大小为\(i\)的子树有多少个。
为什么是\(\binom{a_k+c_k-1}{c_k}\),这是个可重组合公式。我们可以这样考虑,我们现在有\(a_k\)中子树可以选,我们可以从中选出\(c_k\)个。那么我们相当于$$\sum_{i = 1}^{a_k}x_i = c_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那里迅速了)得到
\]
于是就可推导出:
\]
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的更多相关文章
- Milliard Vasya's Function-Ural1353动态规划
Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning mathematician. He decided to make ...
- CF460 A. Vasya and Socks
A. Vasya and Socks time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 递推DP URAL 1353 Milliard Vasya's Function
题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...
- 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 ...
- 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 ...
- codeforces 676C C. Vasya and String(二分)
题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...
- Where is Vasya?
Where is Vasya? Vasya stands in line with number of people p (including Vasya), but he doesn't know ...
- 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 ...
- 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 ...
随机推荐
- android小结
一. 对与java读写文件的操作: 字节流: //filename 可以是文件名,可以是文件路径 FileOutputStream outputStream=new FileOutputStream ...
- 【暴力模拟】UVA 1594 - Ducci Sequence
想麻烦了.这题真的那么水啊..直接暴力模拟,1000次(看了网上的200次就能A)后判断是否全为0,否则就是LOOP: #include <iostream> #include <s ...
- 【转载】Git的安装与使用
Git的安装与使用 转载来源:http://www.cnblogs.com/Bonker/p/3441781.html 1,下载git https://code.google.com/p/msysg ...
- runloop之于thread
做一个技术方向久了,难免会沉溺其中,对当初开始接触这个方向的许多根本上的疑问渐渐都不了了之,意识上认为然,而不知其所以然. 最近重新梳理iOS的runloop,说说自己的理解,希望能说清楚. 先抛出一 ...
- MongoDB 的分组操作 In C#
C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj h ...
- 使用greenDao出现Property 'status' is not part of ********.NewCommentDao@717de9a
应为版本号的原因造成的,升级Schema版本号即可
- HW—字符串最后一个单词的长度,单词以空格隔开。
描述 计算字符串最后一个单词的长度,单词以空格隔开. 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128. 输出 整数N,最后一个单词的长度. 样例输入 hell ...
- java多线程总结二:后台线程(守护线程)
所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程.反过来说,只要有任何非 ...
- 为 Date 对象添加 ago 属性
/* * 此处,__defineGetter__与__defineSetter__相当于C#实体中类中的get与set **/ Date.prototype.__defineGetter__('ago ...
- WPF 关于XDocument(xml) 的部分操作记录
(1)删除xml文件中的一个结点的方法,有如下两种方式(只有存在数据绑定的情况下才会有第二种情况,否则一般是第一种情况): private void DeletePacsNode() { //从xml ...