for(int i = k; i; i = f[i]) mark[i] = 1;
int x = k;
for(int u = x; u; u = f[u]) {
k = u, dis[u] = 0;
dfs(u, f[u]);
}
void dfs(int u,int fa) {
f[u] = fa;
if(dis[u] > dis[k]) k = u;
for(auto [v, w] : edge[u]) {
if(v == fa || mark[v]) continue;
dis[v] = dis[u] + w;
dfs(v, u);
}
}
将直径上的点都标记了之后,为什么后面在dfs(u, fa[u])的时候不能写成dfs(u, 0),反正在dfs的时候遇到fa[u]也被mark过了,但是写成dfs(u,0)就会错,求解