Cod sursa(job #2394511)

Utilizator vladvaculinVlad V vladvaculin Data 1 aprilie 2019 18:05:20
Problema Asmax Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
vector <int> g[16002];
int a[16002], v[16002];

int bfs(int s){
    int sum=a[s];
    v[s] = 1;
    queue <int> q;
    q.push(s);
    while(!q.empty()){
        s = q.front();
        q.pop();

        for(int i = 0; i<g[s].size(); i++){
            if(v[g[s][i]] == 0){
                v[g[s][i]] = v[s]+1;
                if(a[g[s][i]] > 0){
                    sum += a[g[s][i]];
                    q.push(g[s][i]);
                }
                else{
                    int k = bfs(g[s][i]);
                    if(sum+k>sum)
                        sum+=k;
                }
            }
        }
    }
    return sum;
}

int main(){
    int j, mn=-1003;
    fin >> n;
    for(int i = 1; i<=n; i++){
        fin >> a[i];
        if(a[i] > mn){
            mn=a[i];
            j=i;
        }
    }
    int x, y;
    for(int i = 0; i<n-1;i++){
        fin>>x>>y;
        g[x].pb(y);
        g[y].pb(x);
    }
    fout << bfs(j);
}