Pagini recente » Cod sursa (job #609055) | Cod sursa (job #505187) | Cod sursa (job #1052411) | Cod sursa (job #60834) | Cod sursa (job #1827082)
#include <fstream>
#include <stdint.h>
using namespace std;
fstream f1("asmax.in", ios::in);
fstream f2("asmax.out", ios::out);
int32_t n, val[16001], stiva[16001], cap[16001], v[16001], viz[16001];
int32_t t[16001], viz2[16001], coada[16001], prim=1, ultim=1, k=1;
int32_t maxi=-999999999;
struct muchie
{
int x, y;
}muc[16001];
void dfs(int nod)
{
int32_t i;
for(i=1 ; i<=n; i++)
if((!viz[i])&&(t[i]==nod))
{
viz[i]=1;
dfs(i);
if(val[i]>0) val[nod]+=val[i];
}
}
void bfs()
{
int32_t i;
while(k!=0)
{
for(i=cap[coada[prim]]; i<cap[coada[prim]+1]; i++)
if(!viz2[v[i]])
{
ultim++;
k++;
coada[ultim]=v[i];
viz2[v[i]]=1;
t[coada[ultim]]=coada[prim];
}
prim++;
k--;
}
}
int main()
{
int32_t i, m1 ,m2;
f1>>n;
for(i=1; i<=n; i++)
f1>>val[i];
for(i=1; i<n; i++)
{
f1>>m1>>m2;
muc[i].x=m1;
muc[i].y=m2;
stiva[m1]++;
stiva[m2]++;
}
cap[1]=1;
for(i=1; i<=n; i++)
{
cap[i+1]=cap[i]+stiva[i];
stiva[i]=cap[i];
}
stiva[1]=1;
for(i=1; i<n; i++)
{
m1=muc[i].x;
m2=muc[i].y;
v[stiva[m1]]=m2;
stiva[m1]++;
v[stiva[m2]]=m1;
stiva[m2]++;
}
viz2[1]=1;
coada[prim]=1;
bfs();
viz[1]=1;
dfs(1);
for(i=1; i<=n; i++)
if(val[i]>maxi) maxi=val[i];
f2<<maxi;
return 0;
}