Pagini recente » Cod sursa (job #1027611) | Cod sursa (job #14088) | Cod sursa (job #1870592) | Cod sursa (job #2204496) | Cod sursa (job #1847176)
#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];
void dfs(int last,int nod)
{
int sz,i,nr=0;
dp[nod]=max(dp[nod],c[nod]+dp[last]);
maxi=max(maxi,dp[nod]);
sz=G[nod].size();
for (i=0;i<sz;i++)
dfs(nod,G[nod][i]);
}
int main()
{
int i,x,y,nr,vf;
f>>N;
for (i=1;i<=N;i++)
{f>>c[i];dp[i]=c[i];}
for (i=1;i<N;i++)
{
f>>x>>y;
viz[y]=1;
G[x].push_back(y);
}
for (i=1;i<=N;i++) if (viz[i]==0) {vf=i;break;}
dfs(0,vf);
g<<maxi;
}