Cod sursa(job #2825283)

Utilizator SofeiAndreiSofei Andrei SofeiAndrei Data 4 ianuarie 2022 14:45:39
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int n,Smax=-1000,start;
int val[16001];
bool vizitat[16001];
vector <int> vecini[16001];
int DFS(int start){
    if(vizitat[start]==0){
        vizitat[start]=1;
        int suma_copii=0;
        for(int i=0;i<int(vecini[start].size());i++){
            int vecin=vecini[start][i];
            if(vizitat[vecin]==0){
                int suma_copil=DFS(vecin);
                if(suma_copil>=0){
                    suma_copii+=suma_copil;
                }
            }
        }
        if(val[start]+suma_copii>Smax){
            Smax=val[start]+suma_copii;
        }
        return val[start]+suma_copii;
    }
}
int main()
{
    f>>n;
    start=0;
    val[start]=-1001;
    for(int i=1;i<=n;i++){
        f>>val[i];
    }
    for(int i=1;i<=n;i++){
        if(val[i]>val[start]){
            start=i;
        }
    }
    for(int i=1;i<n;i++){
        int a,b;
        f>>a>>b;
        vecini[a].push_back(b);
        vecini[b].push_back(a);
    }
    DFS(start);
    g<<Smax;
    return 0;
}