Pagini recente » Cod sursa (job #1509847) | Cod sursa (job #2562470) | Cod sursa (job #1080146) | Cod sursa (job #643931) | Cod sursa (job #983514)
Cod sursa(job #983514)
#include <cstdio>
#include <vector>
#include <climits>
#define pb push_back
#define nodes 16001
using namespace std;
int n, i, val[nodes], x, y, MAX=INT_MIN, max_node[nodes];
vector <int> adj[nodes];
bool viz[nodes];
void DFS(int node)
{
viz[node]=1;
max_node[node]=val[node];
for(unsigned j=0;j<adj[node].size();++j)
if(!viz[adj[node][j]])
{
DFS(adj[node][j]);
if(max_node[adj[node][j]]>0)
max_node[node]+=max_node[adj[node][j]];
}
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
scanf("%d", &n);
for(i=1;i<=n;++i)
scanf("%d", &val[i]), max_node[i]=val[i];
for(i=1;i<=n-1;++i)
{
scanf("%d %d", &x, &y);
adj[x].pb(y);
adj[y].pb(x);
}
for(i=1;i<=n;++i)
if(!viz[i])
DFS(i);
for(i=1;i<=n;++i)
if(max_node[i]>MAX)
MAX=max_node[i];
printf("%d\n", MAX);
return 0;
}