题解 | #二叉树中的最大路径和#

二叉树中的最大路径和

https://www.nowcoder.com/practice/8fda1d22554f4824b0ef9c26f35e54dd

package main

import (
	"bufio"
	"fmt"
	"os"
)

const MIN = -1000000000

var in = bufio.NewReader(os.Stdin)
var out = bufio.NewWriter(os.Stdout)

func readInt(a *int) error {
	sign, ans, read := 1, 0, false
	c, err := in.ReadByte()

	for ; err == nil && (c < '0' || c > '9'); c, err = in.ReadByte() {
		if c == '-' {
			sign = -1
		}
	}
	for ; err == nil && c >= '0' && c <= '9'; c, err = in.ReadByte() {
		ans = ans *10 + int(c-'0')
        read = true
	}
    if read {
        *a = ans * sign
        return nil
    }
    return err
}

func max(a, b int) int {
    if a< b {
        return b
    }
    return a
}
func main() {
    defer out.Flush()
	var n int
    readInt(&n)
    var cost = make([]int, n+1)
    var edge = make([][]int, n+1)
    for i := 1; i <= n; i++ {
        readInt(&cost[i])
    }
    root := 0
    for i := 1; i <= n; i++ {
        var cur int
        readInt(&cur)
        if cur == 0 {
            root = i
        } else {
            edge[cur] = append(edge[cur], i)
        }
    }
    ans := MIN
    var dfs func(cur, fa int) int 
    dfs = func(cur, fa int) int{
        ans = max(ans, cost[cur])
        var left, right int= MIN, MIN
        var i int = 0
        for _, item := range edge[cur] {
            if item == fa {
                continue
            }
            if i == 0 {
                left = dfs(item, cur)
            } else {
                right = dfs(item, cur)
            }
            i++ 
        }
        
        ans = max(ans, cost[cur]+max(left+right, max(left, right)))
        return max(cost[cur], cost[cur]+max(left, right))
    }
    dfs(root, -1)
    fmt.Fprintln(out, ans)
}

全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务