Pagini recente » Cod sursa (job #1984281) | Cod sursa (job #2525407) | Cod sursa (job #3228132) | Cod sursa (job #1109275) | Cod sursa (job #1827501)
#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[32001], viz[16001];
int32_t maxi=-999999999;
struct muchie
{
int x, y;
}muc[16001];
void dfs(int nod)
{
int32_t i;
///vizitezi mai intai radacina, apoi fii
for(i=cap[nod]; i<cap[nod+1]; i++)
if(!viz[v[i]])
{
viz[v[i]]=1;
dfs(v[i]);///calculezi suma pentru v[i]
if(val[v[i]]>0) val[nod]+=val[v[i]];
}
///ai calculat val[nod], reactualizezi maximul
if(maxi< val[nod]) maxi=val[nod];
}
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]++;
}
viz[1]=1;
dfs(1);
f2<<maxi;
return 0;
}