Cod sursa(job #2939056)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 12 noiembrie 2022 21:55:17
Problema Asmax Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>
#include <algorithm>

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

struct nnod
{
  int nod, lvl;
  bool operator <(const nnod& other) const
  {
    return (lvl>other.lvl);
  }
}nd[16005];
vector <int> v[16005];
int n, tata[16005], dp[16005], vv[16005];
int maxim=-(2e9);

void dfs(int nod, int lvl);

int main()
{
  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);
    if(a>b) swap(a, b);
    tata[b]=a;
  }
  dfs(1, 1);
  sort(nd+1, nd+n+1);
  for(i=1; i<=n; i++)
  {
    dp[nd[i].nod]+=vv[nd[i].nod];
    if(dp[nd[i].nod]>0) dp[tata[nd[i].nod]]+=dp[nd[i].nod];
    maxim=max(maxim, dp[nd[i].nod]);
  }
  fout<<maxim<<'\n';
}

void dfs(int nod, int lvl)
{
  if(nd[nod].lvl==0)
  {
    nd[nod].lvl=lvl;
    nd[nod].nod=nod;
    for(auto i:v[nod]) dfs(i, lvl+1);
  }
}