Cod sursa(job #1309085)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 5 ianuarie 2015 11:26:19
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include<vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");

const int nmax = 16006;
int n, sum[nmax], rasp = -100000000, tata[nmax];
vector<int> vecini[nmax];
bool viz[nmax];

void dfs(int x)
{
    viz[x] = 1;
    for(int i = 0; i<(int)vecini[x].size(); i++)
    {
        if(viz[vecini[x][i]]==0)
        {
            tata[vecini[x][i]] = x;
            dfs(vecini[x][i]);
        }

        if(sum[vecini[x][i]]>0 && tata[x]!=vecini[x][i])
        {
            sum[x] += sum[vecini[x][i]];
        }
    }

    //out<<x<<' '<<sum[x]<<'\n';

    if(rasp<sum[x])
        rasp = sum[x];
}

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

    for(int i = 1; i<n; i++)
    {
        int x, y;
        in>>x>>y;

        vecini[x].push_back(y);
        vecini[y].push_back(x);
    }

    dfs(1);

    out<<rasp<<'\n';

    return 0;
}