Pagini recente » Cod sursa (job #157344) | Cod sursa (job #3124004) | Cod sursa (job #2520202) | Borderou de evaluare (job #3313418) | Cod sursa (job #3341342)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("asmax.in");
ofstream cout ("asmax.out");
int n,x,y;
int dp[16005];
int ver[16005];
int costuri[16005];
struct varf
{
int x;
int cost;
};
vector<varf>g[16005];
int calc_cost(int nod)
{
int costul=0;
for (int i=0; i<g[nod].size(); i++)
{
int vecin=g[nod][i].x;
if (ver[vecin]==0)
{
ver[vecin]=1;
int aux=calc_cost(vecin);
if (aux>=0)
costul+=aux;
}
}
dp[nod]=costuri[nod]+costul;
return dp[nod];
}
int main()
{
cin>>n;
for (int i=1; i<=n; i++)
cin>>costuri[i];
while (cin>>x>>y)
{
g[x].push_back({y,costuri[y]});
g[y].push_back({x,costuri[x]});
}
ver[1]=1;
int maxim=-1e9;
calc_cost(1);
for (int i=1;i<=n;i++)
if (dp[i]>maxim)
maxim=dp[i];
cout<<maxim;
return 0;
}