Pagini recente » Cod sursa (job #827059) | Istoria paginii utilizator/g_petrica | Cod sursa (job #1377262) | Cod sursa (job #1474770) | Cod sursa (job #2050564)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int MAXN=16010;
ifstream q("asmax.in");
ofstream w("asmax.out");
int v[MAXN],tata[MAXN],n;
int din[MAXN]; /// v[i] = suma maxima a unui subardbore cu radacna in nodul i
vector<int> graf[MAXN];
int best=-99999999;
void dfs(int nod)
{
din[nod] = v[nod];
for(int i=0; i<graf[nod].size(); i++)
{
int vecin = graf[nod][i];
if(tata[nod] != vecin)
{
tata[vecin] = nod;
dfs(vecin);
if(din[vecin]>0)
{
din[nod] += din[vecin];
}
}
}
best = max(best, din[nod]);
}
int main()
{
q>>n;
for(int i=1;i<=n;i++)
q>>v[i];
for(int i=1;i<=n-1;i++)
{
int a,b;
q>>a>>b;
graf[a].push_back(b);
graf[b].push_back(a);
}
dfs(1);
w<<best;
return 0;
}