Cod sursa(job #2371454)

Utilizator aannddrreeiiandrei aannddrreeii Data 6 martie 2019 17:41:05
Problema Asmax Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

ifstream citeste("asmax.in");
ofstream scrie("asmax.out");

const int nmax = 16001;

vector<int> adj[nmax];
bool visited[nmax];
int val[nmax], valmax[nmax];

int dfs(int i)
{
 if(visited[i]) return valmax[i];

 visited[i] = true;
 int valc = val[i];

 //cout<<i<<" "<<valc<<"\n";

 for(int j=0;j<adj[i].size();j++)
 {
  valc = max(valc, valc + dfs(adj[i][j]));
  //cout<<i<<" "<<adj[i][j]<<" "<<valc<<"\n";
 }

 valmax[i] = valc;
 return valc;
}

int main()
{
 int n;
 citeste>>n;

 for(int i=1;i<=n;i++)
 {
  visited[i] = false;
  citeste>>val[i];
  valmax[i] = val[i];
 }
 for(int i=1;i<=n-1;i++)
 {
  int a,b;
  citeste>>a>>b;
  bool ok = true;
  /*for(int j=0;j<adj[a].size();j++)
    if(adj[a].at(j) == b)
    {
     ok = false;
     break;
    }
  */
  if(ok)
  {
   adj[a].push_back(b);
   adj[b].push_back(a);
  }
 }

 dfs(1);

 int vmax = valmax[1];
 for(int i=2;i<=n;i++)
 {
  vmax = max(vmax, valmax[i]);
 }
 scrie<<vmax;

}