Pagini recente » Cod sursa (job #3271944) | Cod sursa (job #258913) | Cod sursa (job #1444571) | Cod sursa (job #754188) | Cod sursa (job #1322504)
#include <stdio.h>
#include <vector>
std::vector<int> *adj;
int max(int a,int b)
{
if(a<b) return b;
return a;
}
bool x[16001];
int a[16001],n,ver[16001];
void dfs(int pos)
{
x[pos]=1;
ver[pos]=max(ver[pos],a[pos]);
int len=adj[pos].size();
for(int i=0;i<len;i++)
{
if(x[adj[pos][i]]==0)
{
dfs(adj[pos][i]);
}
}
}
int main()
{
freopen ("asmax.in","r",stdin);
freopen ("asmax.out","w",stdout);
scanf("%d",&n);
adj=new std::vector<int> [n+1];
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int p1,p2;
for(int i=1;i<n;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
adj[p2].push_back(p1);
}
int maxim=0,sum;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++) ver[j]=0;
dfs(i);
sum=0;
for(int j=1;j<=n;j++)
{
if(j==i) sum+=a[i];
else
{
if(ver[j]>0||sum+ver[j]>0) sum+=ver[j];
}
if(maxim<sum) maxim=sum;
}
}
printf("%d\n",maxim);
}