一绿战9红
查看原帖
一绿战9红
990027
Rain2012楼主2024/12/7 09:18
#include<bits/stdc++.h>
using namespace std;
int n,r[6000],fa[6000],dp[6000][2],l,k;
vector<int> son[6000];
void f(int x)
{
    dp[x][0] = 0;
    dp[x][1] = r[x];
    for(int i = 0;i < son[x].size();i++)
    {
        int v = son[x][i];
        f(v);
        dp[x][0] += max(0,max(dp[i][0],dp[i][1]));
        dp[x][1] += dp[i][0];
    }
}
int get_fa(int x)
{
    if(fa[x] == x) return x;
    return get_fa(fa[x]);
}
int main()
{
    cin>>n;
    for(int i = 1;i <= n;i++)
    {
        cin>>r[i];
        fa[i] = i;
    }
    for(int i = 1;i < n;i++)
    {
        cin>>l>>k;
        son[k].push_back(l);
        fa[l] = k;
    }
    f(get_fa(1));
    cout<<max(dp[get_fa(1)][0],dp[get_fa(1)][1]);
}

//一绿战9红

2024/12/7 09:18
加载中...