贴一下我的,dfs每个节点返回一个arr arr[0]:自己可能被染的情况下,以自己为根的子树最多能染色多少个节点 arr[1]:自己一定不被染的情况下,以自己为根的子树最多能染色多少个节点 显然有个隐含条件是arr[0] >= arr[1](因为条件更宽松,所以可能染得肯定更多) 那么每个节点汇总信息的时候,自己一定不被染的情况就是各子树被染节点最多的情况的和,因为arr[0]>=arr[1],所以只加arr[0]就可以。 自己被染色,那最多只能和一个子节点一起被染,假设和子节点A一起染,最后的结果是(A[1] + 2)+ ∑(所有子节点 \ A)[0] 我们要找到子节点里能和自己构成完全平方数,且 A[1] + 2 - A[0] 最大的那个节点,遍历的时候记录最大值,最后累加到自己的[1]上就可以。即(A[1] + 2 - A[0] + ∑所有子节点[0] == A[1] + 2 + ∑(所有子节点 \ A)[0])
点赞 评论

相关推荐

不愿透露姓名的神秘牛友
07-11 15:08
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务