Cod sursa(job #1670350)

Utilizator filip.dutescuDutescu Filip Ioan filip.dutescu Data 31 martie 2016 17:48:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");

const int N = 16005;
int n, nr, x, y, v[N], vf[N*2], urm[N*2], lst[N*2], ct[N*2];
bool viz[N];

void dfs(int x)
{
    viz[x] = true;
    int p, y;
    p = lst[x];
    ct[x] = v[x];

    while(p != 0)
    {
        y = vf[p];

        if(!viz[y]){
            dfs(y);
        if(ct[y] > 0)
            ct[x] += ct[y];
        }
        p = urm[p];
    }//ct[x]+=v[x];
}

void Adauga(int x, int y)
{
    nr++;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

int main()
{
    nr = 0;
    in>>n;
    for(int i = 1; i <= n; i++)
    {
        in>>v[i];
    }
    for(int i = 1; i < n; i++)
    {
        in>>x>>y;
        Adauga(x, y);
        Adauga(y, x);
    }
    dfs(1);
    int tp = ct[1], i = 1;
    while(i <= n){
        if(tp < ct[i])
            tp=ct[i];
        i++;
    }
    out<<tp;
    return 0;
}