Cod sursa(job #953461)

Utilizator avramavram andrei marius avram Data 26 mai 2013 11:51:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <vector>

using namespace std;

vector<int> L[20000];
int v[20000], c[20000], s[20000];
int n, x, y, maxim, i;

using namespace std;

void dfs(int x) {
    v[x] = 1;
    int sum = c[x];
    for (int i=0;i<L[x].size();i++) {
        if (v[ L[x][i]  ] ==0) {
            dfs(L[x][i]);
            if (s[L[x][i]] > 0)
                sum += s[L[x][i]];
        }

    }
    if (sum > c[x])
        s[x] = sum;
    else
        s[x] = c[x];
    if (s[x] > maxim)
        maxim = s[x];

}


int main () {
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>c[i];
    for (i=1;i<n;i++) {
        fin>>x>>y;
        L[x].push_back(y);
        L[y].push_back(x);
    }

    maxim = -(1<<30);
    dfs(1);
    fout<<maxim<<"\n";
    return 0;
}