Pagini recente » Cod sursa (job #56210) | Cod sursa (job #1306524) | Cod sursa (job #2943598) | Cod sursa (job #754441) | Cod sursa (job #2449405)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
struct nod{
int val, maxval;
vector<int> v;
}a[16003];
bool visited[16003];
int n;
int dfs(int x)
{
visited[x]=1;
for(int i=0;i<a[x].v.size();++i)
if(!visited[a[x].v[i]])
a[x].maxval=max(a[x].maxval, a[x].maxval+dfs(a[x].v[i]));
return a[x].maxval;
}
int main()
{
fin>>n;
for(int i=1;i<=n;++i) fin>>a[i].val, a[i].maxval=a[i].val;
for(int i=1;i<=n;++i)
{
int x, y;
fin>>x>>y;
a[x].v.push_back(y);
a[y].v.push_back(x);
}
int maxim=dfs(1);
for(int i=2;i<=n;++i) maxim=max(maxim, a[i].maxval);
fout<<maxim<<"\n";
return 0;
}