Cod sursa(job #2050564)

Utilizator fulger13Pomirleanu Sebastian fulger13 Data 28 octombrie 2017 10:28:56
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

const int MAXN=16010;

ifstream q("asmax.in");
ofstream w("asmax.out");

int v[MAXN],tata[MAXN],n;
int din[MAXN]; /// v[i] = suma maxima a unui subardbore cu radacna in nodul i
vector<int> graf[MAXN];
int best=-99999999;

void dfs(int nod)
{
    din[nod] = v[nod];
    for(int i=0; i<graf[nod].size(); i++)
    {
        int vecin = graf[nod][i];
        if(tata[nod] != vecin)
        {
            tata[vecin] = nod;
            dfs(vecin);
            if(din[vecin]>0)
            {
                din[nod] += din[vecin];
            }
        }
    }
    best = max(best, din[nod]);
}

int main()
{
    q>>n;
    for(int i=1;i<=n;i++)
        q>>v[i];
    for(int i=1;i<=n-1;i++)
    {
        int a,b;
        q>>a>>b;
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    dfs(1);
    w<<best;


    return 0;
}