Pagini recente » Cod sursa (job #3132787) | Cod sursa (job #1456950) | Cod sursa (job #10035) | Cod sursa (job #2311974) | Cod sursa (job #1991895)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,v[16005],d[16005],c[16005],pr[16005],viz[16005],ma=-(1000*16000);
vector<int>x[16005];
vector<int>y[16005];
queue<int>q;
void ve()
{
int nod;
while(!q.empty())
{
nod=q.front();
q.pop();
for(int i=0;i<x[nod].size();i++)
if(viz[x[nod][i]]==0)
{
viz[x[nod][i]]=1;
d[x[nod][i]]=d[nod]+1;
pr[x[nod][i]]=nod;
q.push(x[nod][i]);
y[d[x[nod][i]]].push_back(x[nod][i]);
}
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
for(int i=1;i<n;i++)
{
int a,b;
fin>>a>>b;
x[a].push_back(b);
x[b].push_back(a);
}
viz[1]=1;
d[1]=1;
y[1].push_back(1);
q.push(1);
ve();
for(int i=n;i>=1;i--)
for(int j=0;j<y[i].size();j++)
{
int nod=y[i][j];
c[nod]+=v[nod];
if(c[nod]>0)
c[pr[nod]]+=c[nod];
if(c[nod]>ma)
ma=c[nod];
}
fout<<ma;
}