Cod sursa(job #1427223)

Utilizator sherban26FMI Mateescu Serban-Corneliu sherban26 Data 1 mai 2015 18:53:47
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <list>

#define NMAX 16010
#define INF 1010

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

int n;
int v[NMAX], viz[NMAX];
list<int> list_ad[NMAX];

void dfs(int nod)
{
    viz[nod] = 1;

    for (list<int>::iterator it = list_ad[nod].begin(); it != list_ad[nod].end(); ++it)
    {
        if (!viz[*it])
        {
            dfs(*it);
            if (v[*it] > 0)
            {
                v[nod] += v[*it];
            }
        }
    }
}

int main()
{
    fin >> n;

    int maxim = - INF;
    int indexmaxim = 0;

    for (int i = 1; i <= n; ++i)
    {
        fin >> v[i];

        if (v[i] > maxim)
        {
            maxim = v[i];
            indexmaxim = i;
        }
    }

    int a, b;
    for (int i = 0; i < n; ++i)
    {
        fin >> a >> b;

        list_ad[a].push_back(b);
        list_ad[b].push_back(a);
    }

    if (maxim < 0)
    {
        fout << maxim;
    }
    else
    {
        dfs(indexmaxim);
        for (int i = 1; i <= n; ++i)
        {
            if (v[i] > maxim) maxim = v[i];
        }

        fout << maxim;
    }

    return 0;
}