Pagini recente » Cod sursa (job #1932374) | Cod sursa (job #1166145) | Cod sursa (job #1318093) | Cod sursa (job #1573280) | Cod sursa (job #1098144)
#include <fstream>
#include <vector>
#define inf -1000000
#define nmax 16001
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int val[nmax],viz[nmax],r[nmax], sol = inf,n;
vector <int> drum[nmax];
void dfs(int nod)
{
viz[nod] = 1; r[nod] = val[nod];
for (int i=0;i<drum[nod].size();i++)
{
int t = drum[nod][i];
if (!viz[t])
{
dfs(t);
if (r[t] > 0) r[nod] += r[t];
}
}
sol = max(sol,r[nod]);
}
int main()
{
f >> n;
for (int i=1;i<=n;i++)
f >> val[i];
for (int i=1;i<n;i++)
{
int x,y;
f >> x >> y;
drum[x].push_back(y);
drum[y].push_back(x);
}
dfs(1);
g << sol;
return 0;
}