Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
Home
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 设计模式
  • JavaSE
  • JVM
  • JUC
  • Netty
  • CPP
  • QT
  • UE
  • Go
  • Gin
  • Gorm
  • HTML
  • CSS
  • JavaScript
  • vue2
  • TypeScript
  • vue3
  • react
  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringSecurity
  • SpringCloud
  • Mysql
  • Redis
  • 消息中间件
  • RPC
  • 分布式锁
  • 分布式事务
  • 个人博客
  • 弹幕视频平台
  • API网关
  • 售票系统
  • 消息推送平台
  • SaaS短链接系统
  • Linux
  • Docker
  • Git
GitHub (opens new window)
  • 哈希表

  • 双指针

  • 数组

  • 字符串

  • 链表

  • 树

  • 回溯

  • 动态规划

  • 图

  • 二分查找

  • 贪心

  • 栈&队列

  • 堆

  • 位运算

  • 数据结构设计

  • rui的精选题单

  • 笔试真题

    • 数组
    • 二分
    • 树
      • 华为
        • 树的最大路径和
    • 动态规划
    • 回溯
    • 图
  • LeetCode周赛

  • ACM模式输入输出
  • 数学

  • 数据结构与算法
  • 笔试真题
Nreal
2023-12-31
目录

树

# 华为

# 树的最大路径和

题目描述:计算树节点间最大路径和;

输入:

第一行为除了根节点的节点数;

接下来n行每一列分别为:节点id,父节点id,节点间的值val;

输出:最大路径和;

案例:

7
0 1 8
1 -1 -2
2 1 9
4 0 -2
5 4 3
3 0 -3
6 2 -3
输出:9
1
2
3
4
5
6
7
8
9
public class T2 {
    static Map<Integer, ArrayList<Integer>> graph = new HashMap<>();
    static int[] value;
    static int res = Integer.MIN_VALUE;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i=0;i<n;i++){
            graph.put(i,new ArrayList<Integer>());
        }
        value = new int[n];
        for(int i=0;i<n;i++){
            int id = sc.nextInt();
            int fa = sc.nextInt();
            if(fa != -1){
                graph.get(fa).add(id);
            }
            value[id] = sc.nextInt();
        }
        for(int i=0;i<n;i++){
            dfs(i,0);
        }
        System.out.println(res);
    }
    static void dfs(int i, int sum){
        sum += value[i];
        res = Math.max(res,sum);
        for(int j:graph.get(i)){
            dfs(j,sum);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
二分
动态规划

← 二分 动态规划→

Theme by Vdoing | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式