Pagini recente » Cod sursa (job #2877059) | Cod sursa (job #1481986) | Cod sursa (job #1013601) | Cod sursa (job #99276) | Cod sursa (job #2749455)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int n,rasp=-1000000;
bool viz[16001];
int suma_subarbore[16001];
int costuri[16001];
vector<int>adiacenta[16001];
// facem un dfs si calulam mai intai suma tuturor copiilor apoi adaugam la tata numai sumele pozitive
void DFS(int nod)
{
suma_subarbore[nod] = costuri[nod];
for(int i = 0;i<adiacenta[nod].size();i++)
{
int vecin = adiacenta[nod][i];
if(!viz[vecin])
{
viz[vecin]=1;
DFS(vecin);
if(suma_subarbore[vecin]>=0)
suma_subarbore[nod]+=suma_subarbore[vecin];
}
}
}
int main()
{
f >> n;
for(int i = 1;i<=n;i++)
{
f >> costuri[i];
}
for(int i = 1;i<n;i++)
{
int x,y;
f >> x >> y;
adiacenta[x].push_back(y);
adiacenta[y].push_back(x);
}
viz[1] = 1;
DFS(1);
for(int i = 1;i<=n;i++)
rasp = max(rasp,suma_subarbore[i]);
g << rasp;
}