Pagini recente » Cod sursa (job #2245145) | Cod sursa (job #3260543) | Cod sursa (job #275226) | Cod sursa (job #491663) | Cod sursa (job #2155098)
#include <fstream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
#define nmax 16003
vector < int > lista_adicenta[nmax];
int m,x,y,val[nmax],dp[nmax],maxa=INT_MIN;
bool viz[nmax];
void DFS(int nod)
{
viz[nod]=true;
dp[nod]=val[nod];
for(vector < int >::iterator it=lista_adicenta[nod].begin();it!=lista_adicenta[nod].end();it++)
if(!viz[*it])
{
DFS(*it);
dp[nod]=max(dp[nod],dp[nod]+dp[*it]);
}
}
int main()
{
f>>m;
for(int i=1; i<=m; ++i)
f>>val[i];
for(int i=1; i<m; ++i)
{
f>>x>>y;
lista_adicenta[x].push_back(y);
lista_adicenta[y].push_back(x);
}
DFS(1);
for(int i=1;i<=m;++i)
if(dp[i]>maxa) maxa=dp[i];
g<<maxa;
/// g<<max_element(dp+1,dp+m+1);
return 0;
}