Pagini recente » Cod sursa (job #2566693) | Cod sursa (job #255118) | Cod sursa (job #2416318) | Cod sursa (job #2509861) | Cod sursa (job #1434457)
#include <fstream>
#include <list>
using namespace std;
ifstream f1("asmax.in");
ofstream f2("asmax.out");
#define MX 16005
int v[MX], n, smax[MX] ;
list<int> graf[MX];
bool sel[MX];
void DFS(int nod)
{
int s= v[nod], s1;
if ( sel[nod] )
return;
sel[nod]= true;
for ( list<int>::iterator it= graf[nod].begin(); it != graf[nod].end(); it++ )
{
DFS(*it);
s1= smax[*it];
if ( s1 > 0 )
s+= s1;
}
smax[nod] = s;
}
int main()
{
int i, x,y;
f1>>n;
for (i=1; i<=n; i++)
f1>>v[i];
for (i=1; i<n; i++)
{
f1>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
int sm_max= -1001* MX;
DFS(1);
for (i=1; i<=n; i++)
if ( sm_max < smax[i] )
sm_max= smax[i];
f2<<sm_max;
f2.close();
return 0;
}