Cod sursa(job #1322504)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 20 ianuarie 2015 09:01:43
Problema Asmax Scor 20
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,int b)
{
    if(a<b) return b;
    return a;
}
bool x[16001];
int a[16001],n,ver[16001];
void dfs(int pos)
{
     x[pos]=1;
     ver[pos]=max(ver[pos],a[pos]);
     int len=adj[pos].size();
     for(int i=0;i<len;i++)
     {
             if(x[adj[pos][i]]==0)
             {
                                  dfs(adj[pos][i]);
             }
     }
}
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);
    }
    int maxim=0,sum;
    for(int i=1;i<=n;i++)
    {
            for(int j=1;j<=n;j++) ver[j]=0;
            dfs(i);
            sum=0;
            for(int j=1;j<=n;j++)
            {
                    if(j==i) sum+=a[i];
                    else
                    {
                        if(ver[j]>0||sum+ver[j]>0) sum+=ver[j];
                    }
                    if(maxim<sum) maxim=sum;
            }
    }
   printf("%d\n",maxim);
}