求助90分MLE
查看原帖
求助90分MLE
529247
BLX32M_10楼主2023/4/2 11:55
#include <cstdio>
int max(int x, int y) {return x > y ? x : y;}
int r[6001], fa[6001], so[6001][6001], size[6001], l, k, f[6001][2], root = 1;
void dfs(int now)
{
    int i;
    for (i = 1; i <= size[now]; i++)
        dfs(so[now][i]);
    f[now][1] = r[now];
    for (i = 1; i <= size[now]; i++)
    {
        f[now][1] += f[so[now][i]][0];
        f[now][0] += max(f[so[now][i]][0], f[so[now][i]][1]);
    }
}
int main()
{
    int n, i;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        scanf("%d", &r[i]);
    for (i = 1; i < n; i++)
    {
        scanf("%d %d", &l, &k);
        fa[l] = k;
        so[k][++size[k]] = l;
    }
    while (fa[root]) root = fa[root];
    dfs(root);
    printf("%d", max(f[root][1], f[root][0]));
    return 0;
}
2023/4/2 11:55
加载中...