洛谷 1411 树

题目描述

L发明了一种与树有关的游戏(友情提醒:树是一个没有环的连通图):他从树中删除任意数量(可以为0)的边,计算删除后所有连通块大小的乘积,L将得到这么多的分数。你的任务就是对于一颗给定的树,求出L能得到的最大分数。

输入输出格式

输入格式:

 

第一行一个整数n,表示树的节点个数。

接下来n-1行,每行两个整数a[i],bi,表示a[i]与b[i]之间连边。

保证输入的图是一棵树。

 

输出格式:

 

输出一个整数,表示L能得到的最大分数。

 

输入输出样例

输入样例#1: 复制
样例1:
5
1 2
2 3
3 4
4 5
样例2:
8
1 2
1 3
2 4
2 5
3 6
3 7
6 8
样例3:
3
1 2
1 3 
输出样例#1: 复制
样例1:
6
样例2:
18
样例3:
3 

说明

【数据范围】

对于10%的数据,1<=n<=5;

对于30%的数据,1<=n<=100;

另有30%的数据,保证数据是一条链。

对于100%的数据,1<=n<=700;

 

yk拖我看这道题,我看得一脸懵逼,终于看懂了,决定理论AC一下

Solution

dp[i][j]表示以i为根的子树里有j个点与点i相连,得到的最大的除i在的联通块的其他联通块的大小的乘积😀

对于一个状态dp[i][j],只需要除i所在的联通块的其他联通块的贡献确定了,dp值就确定了

因为答案与每个联通块大小有关,所以状态应该要确定自己所在联通块的大小,dp的过程就是在确定每个子树内有多少个点与根相连

据说要写高精,我就很不想写了

posted @ 2017-11-03 07:39  o00v00o  阅读(296)  评论(0编辑  收藏  举报