Cod sursa(job #529823)

Utilizator micky000Antal Ioan micky000 Data 6 februarie 2011 10:09:32
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<vector>
using namespace std;
 
FILE*f=fopen("asmax.in","r");
FILE*g=fopen("asmax.out","w");
 
int A[16005],i,N,a,b,S[16005],Smax;
char Viz[16005];
vector<int>W[16005];
 
void dfs(int nod){
    Viz[nod] = 1;
    vector<int>::iterator itt;
    for ( itt = W[nod].begin() ; itt != W[nod].end() ; ++itt ){
        if ( !Viz[*itt] )
            dfs(*itt);
    }
     
    S[nod] = A[nod];
    for ( itt = W[nod].begin() ; itt != W[nod].end() ; ++itt ){
        if ( S[*itt] > 0 )
          S[nod] += S[*itt];
    }
    if ( S[nod] > Smax )
        Smax = S[nod];
     
}
 
int main () {
     
    fscanf(f,"%d",&N);
    for ( i = 1 ; i <= N ; ++i )
        fscanf(f,"%d",&A[i]);
    for ( i = 1 ; i < N ; ++i ){
        fscanf(f,"%d %d",&a,&b);
        W[a].push_back(b);
        W[b].push_back(a);
    }
    Smax = -1<<29;
    dfs(1);
     
    fprintf(g,"%d\n",Smax);
     
    fclose(f);
    fclose(g);
     
    return 0;
}