Pagini recente » Cod sursa (job #356709) | Cod sursa (job #1424908) | Cod sursa (job #2406700) | Cod sursa (job #1904149) | Cod sursa (job #3155727)
#include <fstream>
#include <set>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,i,j,viz[16005],s[16005],ma[16005],mi,x,y,k,sol[16005],a[16005],S,M;
set <int> v[16005];
void dfs(int nod)
{
viz[nod]=1;
s[nod]=a[nod];
ma[nod]=0;
for (set<int>::iterator i=v[nod].begin();i!=v[nod].end();i++)
{
if (viz[*i]==0) {dfs(*i);
if (s[*i]>0) s[nod]+=s[*i];
ma[nod]=max(ma[nod],s[*i]);}
}
ma[nod]=max(ma[nod],S-s[nod]);
}
int main()
{
fin >>n;
for (i=1;i<=n;i++)
{
fin >>a[i];
S=S+a[i];
}
while (fin >>x>>y)
{
v[x].insert(y);
v[y].insert(x);
}
dfs(1);
mi=-2e9;
for (i=1;i<=n;i++)
{
if (ma[i]>M) M=ma[i];
}
fout <<M;
return 0;
}