Pagini recente » Cod sursa (job #668414) | Cod sursa (job #2171430) | Cod sursa (job #1909154) | Cod sursa (job #1994161) | Cod sursa (job #1309085)
#include <fstream>
#include<vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int nmax = 16006;
int n, sum[nmax], rasp = -100000000, tata[nmax];
vector<int> vecini[nmax];
bool viz[nmax];
void dfs(int x)
{
viz[x] = 1;
for(int i = 0; i<(int)vecini[x].size(); i++)
{
if(viz[vecini[x][i]]==0)
{
tata[vecini[x][i]] = x;
dfs(vecini[x][i]);
}
if(sum[vecini[x][i]]>0 && tata[x]!=vecini[x][i])
{
sum[x] += sum[vecini[x][i]];
}
}
//out<<x<<' '<<sum[x]<<'\n';
if(rasp<sum[x])
rasp = sum[x];
}
int main()
{
in>>n;
for(int i = 1; i<=n; i++)
{
in>>sum[i];
}
for(int i = 1; i<n; i++)
{
int x, y;
in>>x>>y;
vecini[x].push_back(y);
vecini[y].push_back(x);
}
dfs(1);
out<<rasp<<'\n';
return 0;
}