Pagini recente » Cod sursa (job #2318539) | Cod sursa (job #1174162) | Cod sursa (job #1687672) | Cod sursa (job #3170412) | Cod sursa (job #1083977)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector<int> gr[16001];
queue<int> coada;
int n, i, q[16001], nr[16001], maxim, a, b, xf;
bool viz[16001], exinc[16001];
int main()
{
maxim=-16000005;
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())
{
viz[xf]=1;
xf=coada.front(); coada.pop();
for(i=0; i<gr[xf].size(); i++)
{
if(!viz[gr[xf][i]] && q[gr[xf][i]]+q[xf]>q[gr[xf][i]])
{
if(!exinc[gr[xf][i]])
{
coada.push(gr[xf][i]);
exinc[gr[xf][i]]=1;
}
q[gr[xf][i]]=q[gr[xf][i]]+q[xf];
}
}
}
for(i=1; i<=n; i++)
{
if(q[i]>maxim)
maxim=q[i];
}
g<<maxim;
}