有点疑问
查看原帖
有点疑问
436516
to_be_N0_1楼主2022/9/21 21:02
  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)就会错,求解

2022/9/21 21:02
加载中...