错误原因
最近一直在学习怎么去写暴力,今天复习到树与图的存储和遍历
代码错误的原因:我们要求的res答案不应该在dfs函数中比较,因为我们要求的是最小值
有的点到下面子树中的点万一距离是0,就GG了, 而要求的是最远距离的最小值
为什么树的直径可以呢?我们求的是最大值,所以0什么的也不影响,所以我们将对于在每一个点上做dfs的时候,将这个dfs最终整体的返回值进行一个返回的操作!
import java.util.*;
public class Main{
static int N = 10010;
static int [] h = new int [N];
static int [] e = new int [N];
static int [] ne = new int [N];
static int [] w = new int [N];
static int idx, n, res = (int) 1e8;
static void add(int a, int b, int c) {
e[idx] = b;
w[idx] = c;
ne[idx] = h[a];
h[a] = idx ++;
}
static int dfs(int u, int father) {
int d = 0;
for(int i = h[u]; i != -1; i = ne[i]) {
int j = e[i];
if(j == father) continue;
int dist = dfs(j, u) + w[i];
d = Math.max(d, dist);
}
return d;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
Arrays.fill(h, -1);
for(int i = 0; i < n - 1; i ++){
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
add(a, b, c);
add(b, a, c);
}
for(int i = 1; i <= n; i ++) res = Math.min(res, dfs(i, -1));;
System.out.println(res);
}
}