Cod sursa(job #2939062)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 12 noiembrie 2022 22:03:22
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");

bool f[16005];
vector <int> v[16005];
vector <int> lv[16005];
int n, tata[16005], dp[16005], vv[16005];
int maxim=-(2e9);

void dfs(int, int, int);

int main()
{
  ios_base::sync_with_stdio(false);
  fin.tie(0);
  int a, b, i;
  fin>>n;
  for(i=1; i<=n; i++) fin>>vv[i];
  for(i=1; i<n; i++)
  {
    fin>>a>>b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  dfs(1, 1, 0);
  for(i=n; i>=1; i--)
  {
    for(auto l:lv[i])
    {
      dp[l]+=vv[l];
      if(dp[l]>0) dp[tata[l]]+=dp[l];
      maxim=max(maxim, dp[l]);
    }
  }
  fout<<maxim<<'\n';
}

void dfs(int nod, int lvl, int tr)
{
  if(!f[nod])
  {
    tata[nod]=tr;
    f[nod]=true;
    lv[lvl].push_back(nod);
    for(auto i:v[nod]) dfs(i, lvl+1, nod);
  }
}