Pagini recente » Cod sursa (job #209300) | Cod sursa (job #1323175) | Cod sursa (job #420811) | Cod sursa (job #2677931) | Cod sursa (job #2155095)
#include <fstream>
#include <vector>
#include <algorithm>
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;
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(; m>1; --m)
{
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;
}