Cod sursa(job #1149535)

Utilizator omerOmer Cerrahoglu omer Data 21 martie 2014 23:06:39
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<vector>
const int N=16001;
using namespace std;
FILE *f,*g;

vector<int> graph[N];
int summax[N], val[N];    int n;
bool seen[N];

void read(void){

    f=fopen("asmax.in","r");
    g=fopen("asmax.out","w");
    
    fscanf(f,"%d",&n);

    int i,a,b;
    for(i=1; i<=n; i++) fscanf(f,"%d",&val[i]);

    for(i=1; i<=n-1; i++){

        fscanf(f,"%d%d",&a,&b);
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
}

void createmax(int a){

    summax[a]=val[a];

    vector<int>::iterator it=graph[a].begin();
    while( it != graph[a].end() ){
        
        if ( ! seen[*it] ){

            seen[*it]=1;
            
            createmax(*it);

            if ( summax[*it] > 0 ) summax[a]+= summax[*it];
        }

        it++;
    }
}

void solve(void){

    int maxim=-1000000;
    
    int i;
    for(i=1; i<=n; i++) if ( summax[i] > maxim) maxim = summax[i];

    fprintf(g,"%d",maxim);
    
}

int main(void){
    
    read();

    seen[1]=1;
    createmax(1);

    solve();
}