Pagini recente » Borderou de evaluare (job #2864489) | Borderou de evaluare (job #1358111) | Borderou de evaluare (job #1620049) | Borderou de evaluare (job #1212156) | Cod sursa (job #2985608)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector <int> graf[16005];
int v[16005];
int scor[16005];
bool visited[16005];
void dfs(int x)
{
int y;
visited[x]=1;
for(unsigned int i=0; i<graf[x].size(); i++)
{
y=graf[x][i];
if(visited[y]==0)
{
dfs(y);
if(scor[y]>0)
scor[x]+=scor[y];
}
}
scor[x]+=v[x];
}
int main()
{
int n,x,y;
in>>n;
for(int i=1; i<=n; i++)
in>>v[i];
for(int i=1; i<=n-1; i++)
{
in>>x>>y;
graf[x].push_back(y);
graf[y].push_back(x);
}
dfs(1);
int maxim=scor[1];
for(int i=2; i<=n; i++)
maxim=max(scor[i],maxim);
out<<maxim;
return 0;
}