Mai intai trebuie sa te autentifici.
Cod sursa(job #1154543)
Utilizator | Data | 26 martie 2014 11:27:17 | |
---|---|---|---|
Problema | Asmax | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.06 kb |
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int smax=-16000001,rez[16001],v[16001];
vector <int> vecini[16001];
bool viz[16001];
void dfs(int tata)
{
int i,fiu;
smax=max(smax,rez[tata]);
for(i=0;i<vecini[tata].size();i++)
{
fiu=vecini[tata][i];
if(viz[fiu]==0)
{
rez[fiu]=max(rez[tata]+v[fiu],v[fiu]);
viz[fiu]=1;
dfs(fiu);
if(rez[tata]<0)
rez[tata]=max(rez[tata],rez[fiu]+rez[tata]);
else
rez[tata]=max(rez[tata],rez[fiu]);
smax=max(smax,rez[tata]);
}
}
}
int main()
{
int n,i,a,b;
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
}
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
vecini[a].push_back(b);
vecini[b].push_back(a);
}
rez[1]=v[1];
viz[1]=1;
dfs(1);
printf("%d",smax);
return 0;
}