Pagini recente » Cod sursa (job #100592) | Cod sursa (job #66893) | Cod sursa (job #1031013) | Cod sursa (job #668398) | Cod sursa (job #1426577)
#include<fstream>
#include<vector>
using namespace std;
short n,cost[16010];
vector <short> G[16010];
bool viz[16010];
int best[16010];
void Citire()
{
short i,x,y;
ifstream fin("asmax.in");
fin>>n;
for(i=1;i<=n;i++)
fin>>cost[i];
for(i=1;i<n;i++)
{
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
fin.close();
}
void DFS(short x)
{
vector <short>::iterator it;
viz[x]=true;
best[x]=cost[x];
for(it=G[x].begin();it!=G[x].end();it++)
{
if(!viz[*it])
{
DFS(*it);
if(best[*it]>0)
best[x]+=best[*it];
}
}
}
void Afisare()
{
int i,maxim=-2000000000;
for(i=1;i<=n;i++)
maxim=max(maxim,best[i]);
ofstream fout("asmax.out");
fout<<maxim<<"\n";
fout.close();
}
int main()
{
Citire();
DFS(1);
Afisare();
return 0;
}