Mai intai trebuie sa te autentifici.
Cod sursa(job #2044728)
Utilizator | Data | 21 octombrie 2017 12:39:45 | |
---|---|---|---|
Problema | Asmax | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.73 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int Nmax = 16000 + 5;
int n, a[Nmax], smax = - (1 << 30);
#define pb push_back
vector<int> v[Nmax];
bool viz[Nmax];
int dfs(int nod)
{
int ssm = a[nod];
viz[nod] = 1;
for(auto i : v[nod])
{
if(viz[i] == 1)continue;
int sact = dfs(i);
if(sact >= 0)
ssm += sact;
}
if(ssm > smax)smax = ssm;
return ssm;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; ++i)fin >> a[i];
for(int i = 1, x , y; i < n; ++i)
{
fin >> x >> y;
v[x].pb(y);
v[y].pb(x);
}
dfs(1);
fout << smax;
return 0;
}