Cod sursa(job #3137294)

Utilizator mihneauUdroiu Mihnea Alexandru mihneau Data 12 iunie 2023 09:34:48
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
long long ssm[16001],maxim = -2000000000; /// subarbore de suma maxima
int v[16001]; /// valorile din nod
vector <int> mu[16001]; /// lista de adiacenta
void DFS(int nod, int p)
{
    ssm[nod] = v[nod]; /// initial subarborele de suma maxima e valoarea nodului
    for(int i = 0; i < mu[nod].size(); i++){
        int vecin = mu[nod][i];
        if(vecin != p){ /// mergem pe rand in fii (lista de adiacenta fara parinte)
            DFS(vecin, nod);
            if(ssm[vecin] > 0){ /// mereu e avantajos sa adaugam un subarbore daca suma e pozitiva
                ssm[nod] += ssm[vecin]; /// adaugam la subarborele de suma maxima din nod
            }
        }
    }
    maxim = max(maxim, ssm[nod]); /// actualizam maximul global (de peste tot)
}
int main()
{

    ifstream cin("asmax.in");
    ofstream cout("asmax.out");
    int n, i;
    cin >> n;
    for(i = 1; i <= n; i++){
        cin >> v[i]; /// citim valorile
    }
    for(i = 1; i < n; i++){
        int x, y;
        cin >> x >> y; /// citim muchiile
        mu[x].push_back(y);
        mu[y].push_back(x);
    }
    DFS(1, 0);
    cout << maxim;
    return 0;
}