题意:
给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。
请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。
输入格式
第一行包含整数 n。
接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai 和 bi 之间存在一条权值为 ci 的边。
输出格式
输出一个整数,表示所求点到树中其他结点的最远距离。
数据范围
1≤n≤10000
1≤ai,bi≤n
−1e5≤ci≤1e5
输入样例:
5
2 1 1
3 2 1
4 3 1
5 1 1
输出样例:
2
题解:
把1当成树根, 每个节点到其余点的最远距离可以分为两部分去计算,当前节点往下走的最远距离,当前节点往上走的最远距离,然后这两个距离取最大值。
第一次dfs 计算往下走的最远距离,可以进行一次dfs,在回溯的时候由子节点更新当前节点,相当于从下往上更新。
第二次dfs 计算往上走的最远距离,当前节点y往上走的最远距离肯定是由当前节点的父节点x转移过来。至于怎么转移,我们画一个树的图能够发现,由其余点到(除了y到x的分支)父节点x的最远距离加上x到y的最