Pagini recente » Cod sursa (job #1849754) | Cod sursa (job #2906093) | Cod sursa (job #2690087) | Cod sursa (job #2669392) | Cod sursa (job #695729)
Cod sursa(job #695729)
#include<fstream>
#include<cstdio>
#include<vector>
using namespace std;
const int MaxN = 16001;
const int Inf = 0x3f3f3f3f;
const char InFile[] = "asmax.in";
const char OutFile[] = "asmax.out";
int N,Sol,Din[MaxN];
bool viz[MaxN];
vector<int> G[MaxN];
int maxim(int a,int b)
{
return a > b ? a:b;
}
void DFS(int nod)
{
vector<int>::iterator it;
viz[nod] = 1;
for( it = G[nod].begin() ; it != G[nod].end() ; ++it )
if( !viz[*it] )
{
DFS(*it);
if( Din[*it] > 0 )
Din[nod] += Din[*it];
}
}
int main()
{
ifstream fin( InFile );
ofstream fout( OutFile );
fin >> N;
int i,x,y;
for( i = 1 ; i <= N ; i++ )
{
fin >> x;
Din[i] = x;
}
for( i = 1 ; i < N ; i++ )
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
DFS(1);
Sol = -Inf;
for( i = 1 ; i <= N ; i++ )
if( Din[i] > Sol )
Sol = Din[i];
fout << Sol << '\n';
fin.close();
fout.close();
return 0;
}