Cod sursa(job #1278118)

Utilizator PhilipDumitruPhilip Dumitru PhilipDumitru Data 28 noiembrie 2014 15:31:08
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <list>

using namespace std;

list <int> adiacList[16001];

int visited[16001];
int valori[16001];

int maximumArb = 0xffffffff;

long int dfs(int x)
{
    long int sum = valori[x], y;
    list <int>::iterator it, it_end;
    for (it = adiacList[x].begin(), it_end = adiacList[x].end(); it != it_end; ++it)
    {
        if (!visited[*it])
        {
            visited[*it] = 1;
            y = dfs(*it);
            if (y > 0)
                sum += y;
        }
    }
    if (maximumArb < sum)
    maximumArb = sum;
    return sum;
}

int main()
{
    FILE * fin = fopen ("asmax.in", "r");
    FILE * fout = fopen ("asmax.out", "w");

    int n, m, i, j;
    fscanf(fin, "%d", &n);
    m = n;
    for (i = 1; i <= m; ++i)
    {
        fscanf(fin, "%d", &valori[i]);
    }
    while (--m)
    {
        fscanf(fin, "%d %d", &i, &j);
        adiacList[i].push_back(j);
        adiacList[j].push_back(i);
    }
    visited[1] = 1;
    dfs(1);
    fprintf(fout, "%ld\n", maximumArb);

    fclose(fin);
    fclose(fout);
    return 0;
}