| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
解题思路本题的算法其实比1947容易,只不过建树比1947麻烦一点,1947的建树开始就保证是个有根树(即一个结点的父亲只有1个),本题需要加一些判断就可以用O(n^2)的时间建树,但注意必须维持有根树的形态 建好树后用一个dp[n]表示n及其子树的权值之和的最大值,先进行初始化,很简单,dp[s]的初始值即是点s的权值 然后从根节点开始dp(建好树后应该只有一个结点没有父亲,就是根节点) 设son[s][i]的第i个孩子(当然并不是真的用二维数组,只是为了表述方便,可以用vector或静态链表实现),那么dp[s]状态转移为 for(i=1;i<=n的孩子数;i++) { if(dp[son[s][i]]>0) dp[s]+=dp[son[s][i]]; } dp可以用dfs(递归式的)实现,dp完后max{dp[i] |1<=i<=n}即为所求 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator