Cod sursa(job #1487982)

Utilizator zertixMaradin Octavian zertix Data 17 septembrie 2015 19:07:23
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <cstdio>
#define maxc 16200
#include <vector>
#include <climits>
using namespace std;

int n,v[maxc],viz[maxc],a,b,nr,smax=INT_MIN;
vector <int > G[maxc];

void read()
{
    scanf("%d",&n);
    for (int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    for (int i=1;i<n;++i)
    {
        scanf("%d%d",&a,&b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
}

int rec(int k)
{
    int s=v[k];
    for (vector<int > :: iterator it= G[k].begin(); it!=G[k].end(); ++it )
    {
        if (!viz[*it])
        {
            viz[*it]=1;
            ++nr;
            int d=rec(*it);
            if (d>=0)
                s+=d;
        }
    }
    if (smax<s)
        smax=s;
    return s;
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    read();
    viz[1]=1;
    rec(1);
    printf("%d",smax);
    return 0;
}