树的直径求助
查看原帖
树的直径求助
134000
Plozia楼主2021/4/27 20:51

DP 做法挂掉了,但是感觉没问题……

关键还对过题解,都没有问题,可是样例就是过不去……

f1f1 是最大值,f2f2 是次大值。

void DP(int now, int father)
{
    for (int i = Head[now]; i; i = Edge[i].Next)
    {
        int u = Edge[i].to;
        if (u == father) continue ;
        dfs(u, now);
        if (f1[u] + Edge[i].val > f1[now]) { f2[now] = f1[now]; f1[now] = f1[u] + Edge[i].val; }
        else { f2[now] = Max(f2[now], f1[u] + Edge[i].val); }
    }
}

void Solve_DP()
{
    DP(1, 0);
    for (int i = 1; i <= n; ++i) ans = Max(ans, f1[i] + f2[i]);
    printf("%d\n", ans);
}
2021/4/27 20:51
加载中...