August 2019

Danish Khan

Solution


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
ll llinf = INT64_MAX;
int n;
ll ans = -llinf;
int a [10000];
vector<int> g[10000];
ll sum[10000], mx[10000];

void dfs(int v, int p) {
    sum[v] = a[v];
    mx[v] = -llinf;
    for (int i = 0; i < g[v].size(); i++) {
        int k = g[v][i];
        if (k == p)
            continue;
        dfs(k, v);
        sum[v] += sum[k];
        if(mx[v]!= -llinf)
            ans = max(ans, mx[v]+mx[k]);
        mx[v] = max(mx[v], mx[k]);
    }
    mx[v] = max(mx[v], sum[v]);
}
int main() 
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    for (int i = 0; i + 1 < n; i++) 
    {
        int u, v;
        cin>>u>>v;
        u--, v--;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    dfs(0, -1);
  
    if(ans == -llinf)
        cout<<"Nagma";
    else
        cout<<ans;
    return 0;
}