Pagini recente » Cod sursa (job #258573) | Cod sursa (job #477182) | Cod sursa (job #2521181) | Cod sursa (job #1927116) | Cod sursa (job #1084016)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector<int> gr[16001];
int n, i, nr[16001], maxim, a, b, xf;
long long q[16001];
bool viz[16001];
int exinc[16001];
void dfs(int k, int last)
{
if(viz[k])
return;
viz[k]=1;
int t;
for(t=0; t<gr[k].size(); t++)
{
if(!viz[gr[k][t]])
{
dfs(gr[k][t], k);
}
if(q[gr[k][t]]>0 && last!=gr[k][t])
q[k]+=q[gr[k][t]];
}
}
int main()
{
maxim=-16777216;
ifstream f("asmax.in");
ofstream g("asmax.out");
f>>n;
for(i=1; i<=n; i++)
{
f>>q[i];
}
for(i=1; i<n; i++)
{
f>>a>>b;
gr[a].push_back(b);
gr[b].push_back(a);
}
dfs(1, 0);
for(i=1; i<=n; i++)
{
if(q[i]>maxim)
maxim=q[i];
}
g<<maxim;
}