Pagini recente » Profil TeamFIID | Cod sursa (job #1354080) | Diferente pentru home intre reviziile 537 si 902 | Istoria paginii utilizator/liv182 | Cod sursa (job #1796695)
#include<cstdio>
#include<vector>
#include<algorithm>
const int NMAX=16001,INF=1<<30;
bool viz[NMAX];
int val[NMAX];
std::vector<int> vecini[NMAX];
void DFS(int nod)
{
if(viz[nod])
return;
viz[nod]=true;
for(std::vector<int>::iterator i=vecini[nod].begin();i!=vecini[nod].end();i++)
{
DFS(*i);
}
for(std::vector<int>::iterator i=vecini[nod].begin();i!=vecini[nod].end();i++)
{
val[nod]=std::max(val[nod],val[nod]+val[*i]);
}
}
int main()
{
FILE *in=fopen("asmax.in","r");
int n;
fscanf(in,"%d ",&n);
for(int i=1;i<=n;i++)
{
fscanf(in,"%d ",&val[i]);
}
for(int i=1;i<=n-1;i++)
{
int x,y;
fscanf(in,"%d %d ",&x,&y);
vecini[x].push_back(y);
vecini[y].push_back(x);
}
fclose(in);
DFS(1);
int rasp=-INF;
for(int i=1;i<=n;i++)
{
rasp=std::max(rasp,val[i]);
}
FILE *out=fopen("asmax.out","w");
fprintf(out,"%d\n",rasp);
fclose(out);
}