Cod sursa(job #917105)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 17 martie 2013 12:36:19
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
using namespace std;

const int MAX_N = 16002;

int N, Res = -999999999, x, y;
int val[MAX_N], st[MAX_N], D[MAX_N], m[MAX_N];
vector < int > v[MAX_N];

int main()
{
    ifstream f("asmax.in");
    ofstream g("asmax.out");

    f >> N;
    for(int i = 1; i <= N; ++i)
        f >> val[i];
    for(int i = 1; i < N; ++i)
        f >> x >> y, v[x].push_back(y), v[y].push_back(x);
    
    for(int i = 1; i <= N; ++i)
        if(!m[i])
        {
            int top = 1;
            st[1] = i, m[i] = 1;
            while(top)
            {
                int ok = 1;
                x = st[top];
                for(int j = 0; j < v[x].size(); ++j)
                    if(!m[ v[x][j] ])
                        m[ v[x][j] ] = 1, ok = 0, ++top, st[top] = v[x][j], j = v[x].size();
                if(ok)
                {
                    D[x] = val[x];
                    for(int j = 0; j < v[x].size(); ++j)
                        if(D[ v[x][j] ] > 0)
                            D[x] += D[ v[x][j] ];
                    if(D[x] > Res)
                        Res = D[x];
                    --top;
                }
            }
        }

    g << Res << '\n';

    f.close();
    g.close();

    return 0;
}