Cod sursa(job #1236815)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 2 octombrie 2014 17:22:33
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
using namespace std;
#include <fstream>
#include <vector>
FILE *fin = fopen("asmax.in", "r");
FILE *fout = fopen("asmax.out", "w");
#define Nmax 16001
#define INF 2000000000

int v[Nmax], mymax = -INF;
vector <bool> uz(Nmax);
vector <int> G[Nmax];

int DFS(int) ;

int main()
{
    int i, a, b, n, rez;
    
    fscanf(fin, "%d", &n);
    for(i = 1; i <= n; ++i) fscanf(fin, "%d", v + i);
    for(i = 1; i < n; ++i)
    {
        fscanf(fin, "%d %d", &a, &b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
    
    DFS(1);
    
    if(mymax < 0)
    {
        mymax = -INF;
        for(i = 1; i <= n; ++i)
            if(mymax < v[i]) mymax = v[i];
    }
    
    fprintf(fout, "%d\n", mymax);
    return 0;
}



int DFS(int vf)
{
    int s = v[vf];
    vector <int>::iterator it;
    
    uz[vf] = 1;
    for(it = G[vf].begin(); it != G[vf].end(); ++it)
        if(!uz[*it])
            s += DFS(*it);
    
    if(mymax < s) mymax = s;
    
    if(s < 0) s = 0;
    return s;
}