Pagini recente » Cod sursa (job #731109) | Cod sursa (job #833368) | Cod sursa (job #1734925) | Cod sursa (job #1595215) | Cod sursa (job #1430038)
#include <fstream>
#define dim 16001
#include <queue>
#include <vector>
#define INF 1 << 29
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector <short int> G[dim];
queue <int> Q;
int val[dim],n,a,b,nod,node,viz[dim],leg,Max,i;
int main()
{
fin>>n;
Max-=INF;
for(i=1;i<=n;i++)
fin>>val[i];
for(i=1;i<n;i++)
{
fin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
for(i=1;i<=n;i++)
if(G[i].size()==1)
Q.push(i);
while(!Q.empty())
{
node=Q.front();
for(i=0;i<G[node].size();i++)
{
nod=G[node][i];
leg=G[nod].size();
if(viz[nod]<leg)
{
viz[node]++;
viz[nod]++;
if(val[node]+val[nod]>=val[nod])
val[nod]+=val[node];
if(viz[nod]+1==leg)
Q.push(nod);
}
if(val[node]>Max)
Max=val[node];
}
Q.pop();
}
fout<<Max;
return 0;
}