Pagini recente » Cod sursa (job #266394) | Cod sursa (job #1095392) | Cod sursa (job #2768603) | Cod sursa (job #3292146) | Cod sursa (job #3223182)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int n_max=16001;
vector<int> graf[n_max];
int val[n_max];
bool vizitat[n_max];
int costmax[n_max];
void dfs(int node)
{
vizitat[node]=true;
costmax[node]=val[node];
for(int vecin : graf[node])
{
if(!vizitat[vecin])
{
dfs(vecin);
if(costmax[vecin]>0)
costmax[node]+=costmax[vecin];
}
}
}
int main()
{
int n;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>val[i];
}
for(int i=1;i<=n-1;i++)
{
int a,b;
fin>>a>>b;
graf[a].push_back(b);
graf[b].push_back(a);
}
dfs(1);
int asmax= -999999;
for(int i=1;i<=n;i++)
asmax=max(costmax[i],asmax);
fout<<asmax;
return 0;
}