Cod sursa(job #831313)

Utilizator voicuraduVoicu Radu voicuradu Data 8 decembrie 2012 14:07:21
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<vector>
using namespace std;
const int MIN=-2000000000;
int n,v[16010],s[16010],viz[16010];
vector<int> a[16010];
void read(){
    int x,y;
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&v[i]);
        s[i]=v[i];
    }
    for(int i=1;i<n;i++){
        scanf("%d%d",&x,&y);
        a[x].push_back(y);
        a[y].push_back(x);
    }
}

int dfs(int x){
    //if(a[x].size()==1)
   //     return s[x];
    vector<int>::iterator it;
    viz[x]=1;
    int val;
    for(it=a[x].begin();it!=a[x].end();it++){
        if(!viz[*it]){
            dfs(*it);
            if(s[*it]>0)
                s[x]+=s[*it];
        }
    }
    viz[x]=0;
}

void rez(){
    int max=MIN,val;
    dfs(1);
    for(int i=1;i<=n;i++){
        if(s[i]>max)
            max=s[i];
    }
    printf("%d\n",max);
}

int main(){
    read();
    rez();
    return 0;
}