Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

解题思路

Posted by 200730690105 at 2009-08-07 23:09:48 on Problem 1192 and last updated at 2009-08-07 23:13:42
本题的算法其实比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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator