Cod sursa(job #3362098)

Utilizator RaresPanuPanu Rares RaresPanu Data 2 august 2026 15:14:44
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

int v[100001];
int rez[100001];

void dfs(int node,vector<vector<int>> &tree, vector<int> &parent, vector <int> &leaf,int padre) {
    parent[node]=padre;
    int cnt=0;
    for (int i=0;i<tree[node].size();i++) {
        if (tree[node][i]!=padre) {
            dfs(tree[node][i],tree,parent,leaf,node);
            cnt++;
        }
    }
    if (cnt==0) {
        leaf[node]=1;
    }
}

void cadane(int node, vector <vector <int>> &tree, vector<int> &parent) {
    int sum=v[node];
    for (int i=0;i<tree[node].size();i++) {
        if (tree[node][i]!=parent[node]) {
            cadane(tree[node][i],tree,parent);
            if (rez[tree[node][i]]>=0) {
                sum+=rez[tree[node][i]];
            }
        }
    }
    rez[node]=sum;
}

int main() {
    int n;
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];
    }

    vector<vector<int>> tree(n+1);
    vector<int> parent(n+1);
    vector<int> leaf(n+1);

    for (int i=1;i<=n-1;i++) {
        int a,b;
        fin >> a >> b;
        tree[a].push_back(b);
        tree[b].push_back(a);
    }
    dfs(1,tree,parent,leaf, 0);
    cadane(1,tree,parent);
    int maxim=-1e9;
    for (int i=1;i<=n;i++) {
        maxim=max(maxim,rez[i]);
    }
    fout << maxim;
    return 0;
}