Pagini recente » Cod sursa (job #1811737) | Cod sursa (job #807210) | Cod sursa (job #1913007) | Cod sursa (job #1734364) | Cod sursa (job #1846501)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int maxn=16002;
const int inf=1<<30;
int N,c[maxn],dp[maxn],maxi=-inf;
bool viz[maxn];
vector <int>G[maxn];
int dfs(int last,int nod)
{
int sz,i,nr=0;
viz[nod]=1;
if (dp[nod]<c[nod]+dp[last]) {dp[nod]=c[nod]+dp[last];dp[last]-=c[last];}
dp[nod]=max(dp[nod],c[nod]+dp[last]);
sz=G[nod].size();
for (i=0;i<sz;i++)
{
if (viz[G[nod][i]]==0)
{nr=dfs(nod,G[nod][i]);dp[nod]=max(dp[nod],nr+c[nod]);nr=0;}
}
maxi=max(maxi,dp[nod]);
return dp[nod];
}
int main()
{
int i,x,y,nr;
f>>N;
for (i=1;i<=N;i++)
{f>>c[i];dp[i]=c[i];}
for (i=1;i<N;i++)
{
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
nr=dfs(0,1);
g<<maxi;
}