Cod sursa(job #831304)

Utilizator voicuraduVoicu Radu voicuradu Data 8 decembrie 2012 13:54:26
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 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]){
            val=dfs(*it);
            if(val>0)
                s[x]+=val;
        }
    }
    viz[x]=0;
    return s[x];
}

void rez(){
    int max=MIN,val;
    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;
}