Pagini recente » Cod sursa (job #158943) | Cod sursa (job #3154232) | Cod sursa (job #1406764) | Cod sursa (job #182343) | Cod sursa (job #2104418)
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
struct elem
{
int ertek;
int mx;
bool volt;
list<int> kov;
};
elem p[16001];
int maxered=0;
void melysegi(int akt)
{
p[akt].volt=true;
p[akt].mx=p[akt].ertek;
if(!p[akt].kov.empty())
{
for(list<int>::iterator it=p[akt].kov.begin(); it!=p[akt].kov.end(); it++)
{
if(!p[*it].volt)
{
melysegi(*it);
if(p[*it].mx>0) p[akt].mx+=p[*it].mx;
}
}
}
if(p[akt].mx>maxered) maxered=p[akt].mx;
}
int main()
{
ifstream f("asmax.in");
ofstream g("asmax.out");
int n;
f>>n;
int pozdb, maxim;
pozdb=0;
maxim=-1001;
for(int i=1; i<=n; i++)
{
f>>p[i].ertek;
if(p[i].ertek>0) pozdb++;
if(p[i].ertek>maxim) maxim=p[i].ertek;
p[i].volt=false;
}
if(pozdb<2) g<<maxim<<endl;
else
{
int x, y;
for(int i=1; i<=n-1; i++)
{
f>>x>>y;
p[x].kov.push_back(y);
p[y].kov.push_back(x);
}
melysegi(1);
g<<maxered<<endl;
}
return 0;
}