1 条题解

  • 0
    @ 2022-07-19 20:59:22
    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 6005
    int n,root;
    int r[6005],v[6005];
    vector<int> son[6005];
    int f[6005],g[6005];
    void work(int x)
    {
        f[x]=0;
        g[x]=r[x];
        for(int i=0; i<son[x].size(); i++)
        {
            work(son[x][i]);
            f[x]+=max(f[son[x][i]],g[son[x][i]]);
            g[x]+=f[son[x][i]];
        }
    }
    int main()
    {
        cin>>n;
        for(int i=1; i<=n; i++)
            cin>>r[i];
        for(int i=1; i<=n-1; i++)
        {
            int l,k;
            cin>>l>>k;
            son[k].push_back(l);
            v[l]=1;
        }
        for(int i=1; i<=n; i++)
            if(!v[i])
            {
                root=i;
                break;
            }
        work(root);
        cout<<max(f[root],g[root])<<endl;
        return 0;
    }
    /*
    输入 #1:
    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    ans:
    5
    */
    
    
  • 1

信息

ID
1343
难度
7
分类
(无)
标签
递交数
2
已通过
1
通过率
50%
上传者