Pagini recente » Cod sursa (job #564957) | Cod sursa (job #1244933) | Cod sursa (job #830949) | Cod sursa (job #2436966) | Cod sursa (job #1444342)
#include <fstream>
#include <vector>
using namespace std;
const char InFile[]="asmax.in";
const char OutFile[]="asmax.out";
const int MaxN=16111;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,sol,x,y,v[MaxN],best[MaxN],israd[MaxN],viz[MaxN];
vector<int> a[MaxN];
void dfs(int x)
{
viz[x]=1;
best[x]=v[x];
for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)
{
if(viz[*it]==0)
{
dfs(*it);
if(best[*it]>0)
{
best[x]+=best[*it];
}
}
}
}
int main()
{
fin>>N;
for(register int i=1;i<=N;++i)
{
fin>>v[i];
}
for(register int i=1;i<N;++i)
{
fin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
fin.close();
sol=-(1<<30);
for(register int i=1;i<=N;++i)
{
if(viz[i]==0)
{
dfs(i);
}
sol=max(sol,best[i]);
}
fout<<sol;
fout.close();
return 0;
}