Pagini recente » Cod sursa (job #991940) | Cod sursa (job #2022222) | Cod sursa (job #1010306) | Cod sursa (job #222207) | Cod sursa (job #1900351)
#include <fstream>
#include <vector>
using namespace std;
int n,i,maxi,a,b,j,k,x,y,v[16005],r[16005];
vector <int> p[16005];
vector <int> q[16005];
vector <int> w[16005];
void rec(int poz, int rnd, int str)
{
int o;
r[poz]=v[poz];
q[rnd].push_back(str);
p[rnd].push_back(poz);
p[rnd][0]++;
if(k<rnd) k=rnd;
for(o=1; o<=w[poz][0]; o++)
{
if(r[w[poz][o]]==-1001)
{
rec(w[poz][o],rnd+1,poz);
}
}
}
int main()
{
ifstream f("asmax.in");
ofstream g("asmax.out");
f>>n;
maxi=-1001;
for(i=1; i<=n; i++)
{
f>>v[i];
r[i]=-1001;
w[i].push_back(0);
p[i].push_back(0);
q[i].push_back(0);
}
for(i=1; i<n; i++)
{
f>>a>>b;
w[a][0]++;
w[a].push_back(b);
w[b][0]++;
w[b].push_back(a);
}
p[1].push_back(1);
q[1].push_back(0);
rec(1,1,0);
for(i=k; i>=2; i--)
for(j=1; j<=p[i][0]; j++)
{
x=p[i][j];
y=q[i][j];
r[y]=max(r[y],r[x]+r[y]);
if(r[y]>=maxi) maxi=r[y];
}
g<<maxi<<'\n';
f.close(); g.close();
return 0;
}