Cod sursa(job #1412939)

Utilizator karlaKarla Maria karla Data 1 aprilie 2015 17:36:31
Problema Asmax Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <vector>

using namespace std;

int n, val[16100], viz[16100];
long long suma[16100];
vector<int> l[16100];
FILE*f=fopen("asmax.in","r"),*g=fopen("asmax.out","w");

void DFS(int nod)
{
    suma[nod] = val[nod];
    viz[nod] = 1;
    int max1 = 0, s = 0, ok = 1;
    for(int i = 0; i < l[nod].size(); i++)
    {
        ok = 0;
        if(viz[l[nod][i]] == 0){
            DFS(l[nod][i]);
            if(suma[nod] + suma[l[nod][i]] < val[nod] )
                suma[nod] = val[nod];
            else
                suma[nod] = suma[nod] + suma[l[nod][i]];
        }
    }
    //if(ok == 1) suma[nod] = val[nod];


}


int main()
{
    int x, y;
    fscanf(f,"%d\n",&n);
    for(int i = 1; i <= n; i++)
        fscanf(f,"%d ",&val[i]);
    for(int i = 1; i <= n-1; i++)
    {
        fscanf(f,"%d %d\n",&x,&y);
        l[x].push_back(y);
        l[y].push_back(x);
    }
    long long maxim  = -(1<<30);
        DFS(1);
        for(int i = 1; i <= n; i++)
        if(maxim < suma[i])
            maxim = suma[i];
    fprintf(g,"%lld\n",maxim);
    return 0;
}