Cod sursa(job #917191)

Utilizator superman_01Avramescu Cristian superman_01 Data 17 martie 2013 14:21:07
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<vector>

#define NMAX 16005
#define max(a,b) ((a)>(b)?(a):(b))

FILE *f=fopen("asmax.in","r");
FILE *g=fopen("asmax.out","w");

using namespace std;

vector <int> G[NMAX];
bool used[NMAX];
int n,x,y,res=-1<<32;
int cost[NMAX];

void read ( void )
{
    fscanf(f,"%d",&n);
    for(int i(1); i <= n ;fscanf(f,"%d",&cost[i++]));
    for(int i(1); i <= n-1; ++i )
    {
        fscanf(f,"%d%d",&x,&y);
        G[x].push_back(y);
        G[y].push_back(x);
    }
    fclose(f);
}
void DFS ( int node )
{
    used[node]=true;
    vector <int>::iterator it;

    for(it=G[node].begin(); it!=G[node].end() ; ++it )
    {

        int newnode=*it;
        if(!used[newnode])
        {
            DFS(newnode);
            if(cost[newnode] > 0)
            cost[node]=cost[node]+cost[newnode];
        }
    }

   res=max(res,cost[node]);


}
void write ( void )
{
    fprintf(g,"%d",res);
    fclose(g);

}
int main( void )
{
    read();
    DFS(1);
    write();
    return 0;

}