Cod sursa(job #2113433)

Utilizator tanasaradutanasaradu tanasaradu Data 24 ianuarie 2018 16:10:00
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
const int Nmax = 16005;
///dp[i] - > submultimea de suma maxima din subarborele cu radacina i
/// Sol = max(dp[i]) , i = 1 , n
int n , a[Nmax] , dp[Nmax];
vector < int > L[Nmax];
bool viz[Nmax];
int DFS(int nod)
{
    viz[nod] = true;
    dp[nod] = a[nod];
    for(auto i : L[nod])
        if(!viz[i])
            dp[nod] = max(dp[nod] , dp[nod] + DFS(i) );
    return dp[nod];
}
int main()
{
    int x , y;
    fin >> n;
    for(int i = 1 ; i <= n ; i++)
        fin >> a[i];
    for(int i = 1 ; i < n ; i++)
    {
        fin >> x >> y;
        L[x] . push_back(y);
        L[y] . push_back(x);
    }
    DFS(1);
    int sol = - LONG_MAX;
    for(int i = 1 ; i <= n ; i++)
        sol = max(sol , dp[i]);
    fout << sol << "\n";
    fin.close();
    fout.close();
    return 0;
}