Pagini recente » Borderou de evaluare (job #760087) | Borderou de evaluare (job #836546) | Borderou de evaluare (job #2291856) | Borderou de evaluare (job #292005) | Cod sursa (job #1465526)
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
#define MaxN 16001
#define INF 0x3f3f3f3f
int n, x, y;
int summax = -INF;
vector<int> G[MaxN], V(MaxN), sum(MaxN);
queue<int>Q;
bitset<MaxN>viz;
void Dfs(int i);
int main()
{
fin >> n;
for ( int i = 1; i <= n; ++i )
fin >> V[i];
for ( int i = 1; i < n; ++i )
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
Dfs(1);
fout << summax;
fin.close();
fout.close();
return 0;
}
void Dfs(int i)
{
viz[i] = 1;
for ( auto j : G[i] )
{
if ( !viz[j] )
{
Dfs(j);
sum[i] += sum[j];
if ( sum[i] > summax )
summax = sum[i];
viz[j] = 1;
}
}
sum[i] += V[i];
}