Cod sursa(job #3281015)

Utilizator mateistefan11matei stefan mateistefan11 Data 28 februarie 2025 08:36:22
Problema Asmax Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define oo 2000000001
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
/**
2 4 6
1 3
2 10
4 6
5 8

3
*/
int n;
int val[16005];
int root[16005];
int dp[16005];
int maxim;
vector<int> G[16005];
void DFS(int x)
{
    if(G[x].empty())
    {
        dp[x] = val[x];
        return;
    }
    for(auto e : G[x])
        DFS(e);
    int s = 0;
    for(auto e : G[x])
    {
        if(dp[e] > 0)
            s += dp[e];
        ///cout << dp[e] << " " << e << "\n";
    }
    dp[x] = s + val[x];
}
int main()
{
    ios_base::sync_with_stdio(0);
    fin.tie(0);
    fout.tie(0);
    int i,j,x,y;
    fin >> n;
    for(i = 1; i <= n; i++)
        fin >> val[i];
    for(i = 1; i <= n; i++)
        root[i] = 1;
    for(i = 1; i < n; i++)
    {
        fin >> x >> y;
        G[x].push_back(y);
        root[y] = 0;
    }
    for(i = 1; i <= n && root[i] == 0; i++)
        ;
    int rad = i;
    DFS(rad);
    for(i = 1; i <= n; i++)
        maxim = max(maxim, dp[i]);
    fout << maxim;
    return 0;
}