Cod sursa(job #1442656)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 25 mai 2015 23:48:15
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream>
#include<iostream>
#include<vector>

using namespace std;

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

int const NMax = 16005;
vector <int> G[NMax];
int a[NMax], dp[NMax], use[NMax], TT[NMax];
int n;

void citire()
{
    int i, x, y;
    f>>n;
    for(i=1; i<=n; i++)
        f>>a[i];
    for(i=1; i<n; i++){
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void DFS(int nod)
{
    int vecin, i;
    use[nod] = 1;
    dp[nod] = a[nod];

    for(i=0; i<G[nod].size(); i++){
        vecin = G[nod][i];
        if(!use[vecin]){
            TT[vecin] = nod;
            DFS(vecin);
            dp[nod] += dp[vecin];
        }
    }
}

int rez()
{
    int maxi = -1000000000, i, vecin, rad, j;
    for(i=2; i<=n; i++){
        rad = i;
        maxi = max(maxi, dp[1] - dp[rad]);
        for(j=0; j<G[rad].size(); j++){
            vecin = G[rad][j];
            if(vecin == TT[rad])
                continue;
            maxi = max(maxi, dp[vecin]);
        }
    }

    g<<maxi<<"\n";
}

int main()
{
    citire();
    DFS(1);
    rez();
    return 0;
}