DP 做法挂掉了,但是感觉没问题……
关键还对过题解,都没有问题,可是样例就是过不去……
f1 是最大值,f2 是次大值。
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);
}