Pagini recente » Diferente pentru utilizator/apocalypto intre reviziile 211 si 56 | Monitorul de evaluare | marioneta | Istoria paginii utilizator/mar3l3b0ss | Cod sursa (job #2007943)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> graf[16001] ;
int t[16001] ;
bool viz[16001] ;
int maxim ;
int A[16001] ;
int maxim2 ( int a , int b )
{
return a > b ? a : b ;
}
int DFS ( int nod )
{
int i , x ,r ;
//cout << " intrare in functie " << graf[nod].size() ;
for ( i = 0 ; i < graf[nod].size() ; i++ )
{
x = graf[nod][i] ;
if ( viz[x] == false )
{
viz[x] = true ;
//cout << " merg in " << x << endl ;
r = DFS(x) ;
if ( r > 0 )
A[nod] = A[nod] + r ;
}
}
A[nod] = A[nod] + t[nod] ;
if ( A[nod] > maxim )
maxim = A[nod] ;
return A[nod] ;
}
int main()
{
int i , x , y , n ;
ifstream fin ("asmax.in") ;
ofstream fout("asmax.out") ;
fin >> n ;
for ( i = 1 ; i <= n ; i++ )
{
fin >> t[i] ;
viz[i] = false ;
}
for ( i = 1 ; i < n ; i++ )
{
fin >> x >> y ;
graf[x].push_back(y) ;
graf[y].push_back(x) ;
}
viz[1] = true ;
maxim = -100000000 ;
DFS(1) ;
fout << maxim ;
}