Pagini recente » Clasament rar16 | Borderou de evaluare (job #1729897) | Cod sursa (job #2501255) | Borderou de evaluare (job #3150512) | Cod sursa (job #1465544)
#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 summ = -INF;
vector<int> G[MaxN], V(MaxN), sum(MaxN), summax(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];
sum[i] = V[i];
}
for ( int i = 1; i < n; ++i )
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
Dfs(1);
for ( int i = 1; i <= n; ++i )
if ( sum[i] > summ )
summ = sum[i];
fout << summ;
fin.close();
fout.close();
return 0;
}
void Dfs(int i)
{
viz[i] = 1;
for ( auto j : G[i] )
if ( !viz[j] )
{
Dfs(j);
if ( sum[j] > 0 )
sum[i] += sum[j];
}
}