Mai intai trebuie sa te autentifici.
Cod sursa(job #3198626)
| Utilizator | Data | 29 ianuarie 2024 21:41:01 | |
|---|---|---|---|
| Problema | Asmax | Scor | 30 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.81 kb |
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N=16000;
int v[N+1];
int mu[N+1][N+1];
int n, m;
int dp[N+1];
bool fin[N+1];
int maxx=-1001;
int dinamica(int x)
{
if(fin[x]) return dp[x];
else if (dp[x]!=0) return 0;
dp[x]=v[x];
for(int i=1; i<=mu[x][0]; i++)
{
while(mu[x][i]<=x && i<=mu[x][0]) i++;
int aux=dinamica(mu[x][i]);
if(aux>0) dp[x]+=aux;
}
fin[x]=true;
if(dp[x]>maxx) maxx=dp[x];
return dp[x];
}
int main()
{
in>>n;
m=n-1;
for(int i=1; i<=n; i++) in>>v[i];
for(int i=1; i<=m; i++)
{
int a,b;
in>>a>>b;
mu[a][++mu[a][0]]=b;
mu[b][++mu[b][0]]=a;
}
dinamica(1);
out<<maxx;
}