洛谷 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的过程就是在确定每个子树内有多少个点与根相连
据说要写高精,我就很不想写了