Pagini recente » Cod sursa (job #2391279) | Cod sursa (job #3219552) | Cod sursa (job #1731392) | Cod sursa (job #1071736) | Cod sursa (job #1083991)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector<int> gr[16001];
queue<int> coada;
int n, i, nr[16001], maxim, a, b, xf;
long long q[16001];
bool viz[16001];
int exinc[16001];
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);
nr[a]++;
nr[b]++;
}
for(i=1; i<=n; i++)
{
if(nr[i]==1)
{
coada.push(i);
viz[i]=1;
exinc[i]=1;
}
}
while(!coada.empty())
{
xf=coada.front(); coada.pop();
for(i=0; i<gr[xf].size(); i++)
{
if(!viz[gr[xf][i]] && q[xf]>0)
{
if(!exinc[gr[xf][i]])
{
coada.push(gr[xf][i]);
exinc[gr[xf][i]]++;
}
q[gr[xf][i]]=q[gr[xf][i]]+q[xf];
}
}
viz[xf]=1;
}
for(i=1; i<=n; i++)
{
if(q[i]>maxim)
maxim=q[i];
}
g<<maxim;
}