Cod sursa(job #2830430)

Utilizator petru.burdusaBurdusa Petru petru.burdusa Data 9 ianuarie 2022 21:32:17
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int n,a,x,y,maxim;
vector<int>  c, mc;
vector<bool> viz;
vector<vector<int>> list;
ifstream in("asmax.in");
ofstream out("asmax.out");

void dfs(int p, int nod)
{
    viz[nod] =1;
    mc[nod] = c[nod];
    for (int i = 0; i < list[nod].size(); ++i) {
        int vec = list[nod][i];
        if(!viz[vec])
            dfs(nod, vec);
        if(mc[vec] > 0 && vec!=p)
            mc[nod]+=mc[vec];
    }
    if(mc[nod]>maxim)
        maxim = mc[nod];
    if(mc[nod] < 0)
        mc[nod] = 0;

}



int main() {
    in>>n;
    list.resize(n+3);
    viz.resize(n+3);
    c.resize(n+3);
    mc.resize(n+3);
    for (int i = 1; i <= n; ++i) {
        in>>c[i];
    }
    for (int i = 1; i < n; ++i) {
        in>>x>>y;
        list[x].push_back(y);
        list[y].push_back(x);
    }
    maxim = -1000000000;
    dfs(0,1);
    out<<maxim<<'\n';;
}