Cod sursa(job #2358561)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 28 februarie 2019 10:18:46
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
#define DMAX 16010

using namespace std;

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

vector <int> V[DMAX];

bool uz[DMAX];
int Cost[DMAX];
int dp[DMAX];
int maxim[DMAX];

int n,costt,costmax=-INT_MAX/2;

void citire();
void dfs(int node);

int main()
{int i;
 citire();
 for(i=1;i<=n;i++)
     maxim[i]=-INT_MAX/2;
 dfs(1);
 for(i=1;i<=n;i++)
     if(maxim[i]>costmax)
        costmax=maxim[i];
 fout<<costmax<<'\n';
 return 0;
}
void citire()
{int i,x,y;
 fin>>n;
 for(i=1;i<=n;i++)
     {fin>>Cost[i];
      costt+=Cost[i];
     }
 for(i=1;i<n;i++)
     {fin>>x>>y;
      V[x].push_back(y);
      V[y].push_back(x);
     }
}
void dfs(int node)
{int i;
 uz[node]=true;
 dp[node]=Cost[node];
 for(i=0;i<V[node].size();i++)
     if(!uz[V[node][i]])
        {dfs(V[node][i]);
         dp[node]+=dp[V[node][i]];
         if(dp[V[node][i]]>maxim[node])
            maxim[node]=dp[V[node][i]];
        }
 if(maxim[node]<costt-dp[node])
    maxim[node]=costt-dp[node];
}