Cod sursa(job #1322490)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 20 ianuarie 2015 08:44:51
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <vector>
std::vector<int> *adj;
int max;
int a[16001],n,qu[16001],ps,pt,ver[16001];
void bfs(int sum)
{
     ver[qu[ps]]=1;
     if(max<sum) max=sum;
     if(pt==ps||ps>n) return;
     int len=adj[qu[ps]].size();
     for(int it=0;it<len;++it)
     {
             if(ver[adj[qu[ps]][it]]==0)
             {
                                       if((a[adj[qu[ps]][it]]>0)||(sum+a[adj[qu[ps]][it]]>0))
                                       {
                                        qu[pt]=adj[qu[ps]][it];
                                        pt++;
                                       }
             }
     }
     ps++;   
     bfs(sum+a[qu[ps]]);
}
int main()
{
    freopen ("asmax.in","r",stdin);
    freopen ("asmax.out","w",stdout);
    scanf("%d",&n);
    adj=new std::vector<int> [n+1];
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    int p1,p2;
    for(int i=1;i<n;i++)
    {
            scanf("%d%d",&p1,&p2);
            adj[p1].push_back(p2);
            adj[p2].push_back(p1);
    }
    for(int i=1;i<=1;i++)
    {
            for(int j=1;j<=n;j++) ver[j]=0;
            qu[0]=i;
            pt=1;
            ps=0;
            bfs(a[i]);
    }
   printf("%d\n",max);
}