Pagini recente » Cod sursa (job #1839960) | Cod sursa (job #464305) | Cod sursa (job #1853401) | Cod sursa (job #850720) | Cod sursa (job #3230483)
#include <fstream>
using namespace std;
ifstream citire("asmax.in");
ofstream scrie("asmax.out");
const int N = 16000;
int vec[N + 1], conexiuni[N + 1][N + 1], valMax[N + 1];
bool vazut[N + 1];
int n;
void SetValMax(int x)
{
vazut[x] = true;
valMax[x] = vec[x];
for(int i = 1; i <= n; i++)
{
if(conexiuni[x][i] == 1 && !vazut[i])
{
SetValMax(i);
if(valMax[i] > 0)
{
valMax[x] += valMax[i];
}
}
}
}
void CitireVec()
{
citire >> n;
for(int i = 1; i <= n; i++)
{
citire >> vec[i];
}
}
void CitireLeg()
{
for(int i = 0; i < n - 1; i++)
{
int nr1, nr2;
citire >> nr1 >> nr2;
conexiuni[nr1][nr2] = conexiuni[nr2][nr1] = 1;
}
}
int main()
{
CitireVec();
CitireLeg();
SetValMax(1);
int maxv = -1000;
for(int i = 1; i <= n; i++)
{
maxv = max(maxv, valMax[i]);
}
scrie << maxv;
citire.close();
scrie.close();
return 0;
}