Cod sursa(job #1412909)

Utilizator karlaKarla Maria karla Data 1 aprilie 2015 17:20:04
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <vector>

using namespace std;

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

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

}


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);
    }
    int maxim  = 0;
    for(int i = 1; i <= n; i++)
    {
        DFS(1);
        for(int i = 1; i <= n; i++)
        {
            if(maxim < suma[i])
                maxim = suma[i];
        }

    }
    fprintf(g,"%d\n",maxim);
    return 0;
}