Cod sursa(job #2541486)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 8 februarie 2020 14:23:30
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

#define NMAX 20000
using namespace std;

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

vector<int> ma[NMAX];
const int oo = -(1<<30)+1;
int cost[NMAX];
int dp[NMAX];
int viz[NMAX];
int n;
int maxim;


void DFS(int n)
{
   viz[n] = 1;
   for(int i=0;i<ma[n].size();i++)
   {
      if(!viz[ma[n][i]])
      {
         DFS(ma[n][i]);
         dp[n] = max(dp[n],max(cost[n] + dp[ma[n][i]],dp[n] + dp[ma[n][i]]));
         if(dp[n] > maxim)
            maxim = dp[n];
      }

   }
   dp[n] = max(cost[n],dp[n]);
   if(dp[n] > maxim)
      maxim = dp[n];

}

int main()
{
   fin>>n;
   for(int i=1;i<=n;i++)
   {
      fin>>cost[i];
   }
   for(int i=1;i<=n-1;i++)
   {
      int x,y;
      fin>>x>>y;
      ma[x].push_back(y);
      ma[y].push_back(x);

   }

   for(int i=1;i<=n;i++)
   {
      dp[i] = oo;
   }
   maxim = oo;
   dp[1] = cost[1];
   DFS(1);

   fout<<maxim;


}