Pagini recente » Cod sursa (job #237851) | Cod sursa (job #1271113) | Cod sursa (job #2457708) | Cod sursa (job #355165) | Cod sursa (job #505932)
Cod sursa(job #505932)
/*
a[i] = v[i] + (a[i].fiu_1 daca a[i].fiu_1 este > 0, a[i].fiu_2 daca a[i].fiu_2 este > 0, ... , a[i].fiu_n daca a[i].fiu_n este > 0)
rasp = max (a[1],a[2],...,a[n])
*/
#include <cstdio>
#include <vector>
using namespace std;
const int N = 16001;
int v[N],a[N],n;
vector<int> vecin[N];
bool vizitat[N];
void citire()
{
int a,b;
scanf("%i",&n);
for (int i = 1; i <= n; ++i)
scanf("%i",&v[i]);
for (int i = 1; i <= n-1; ++i)
{
scanf("%i%i",&a,&b);
vecin[a].push_back(b);
vecin[b].push_back(a);
}
}
void dfs(int i)
{
vizitat[i] = true;
a[i] = v[i];
for (int k = 0; k < vecin[i].size(); ++k)
{
if (vizitat[ vecin[i][k] ])
continue;
dfs(vecin[i][k]);
if (a[ vecin[i][k] ] > 0)
a[i] += a[ vecin[i][k] ];
}
}
void cautare_maxim()
{
int max = a[1];
for (int i = 2; i <= n; ++i)
if (a[i] > max)
max = a[i];
printf("%i",max);
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
citire();
dfs(1);
cautare_maxim();
return 0;
}