Cod sursa(job #181671)

Utilizator DorinOltean Dorin Dorin Data 18 aprilie 2008 18:38:33
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
# include <stdio.h>
# include <cstring>
# include <vector>

using namespace std;

# define input "asmax.in"
# define output "asmax.out"

# define max 16001

# define maxim(a,b) (a>b?a:b)

vector <int> v[max];
int grad[max],x,y,i,j,n;
int a[max],coada[max],st,dr;
int u[max],ret,k;


int main()
{
    freopen(input, "r", stdin);
    freopen(output, "w", stdout);

	scanf("%d",&n);
    
    for(i = 1; i<= n; i++)
          scanf("%d ",&a[i]);
    
    for(i = 1; i < n; i++)
    {
          scanf("%d%d",&x,&y);
          v[x].push_back(y);
          v[y].push_back(x);
          grad[x]++, grad[y]++;
    }
    
    for(i = 1; i <= n; i++)
          if(grad[i] == 1)    coada[++dr] = i,u[i]=1;
          
    for(st = 1; st <= dr; st++)
    {
        i = coada[st];
        u[i] = 1;
        for( k = 0; k < v[i].size(); k++)
             if(!u[v[i][k]]) break;
        if(k == v[i].size()) continue;
        
        j = v[i][k];
        grad[j]--;
        if(grad[j] == 1)  coada[++dr] = j;        
        ret = maxim(ret,a[i]);    
        if(a[i] > 0) a[j]+=a[i];
        ret = maxim(ret,a[j]);
    }
    
    printf("%d ",ret);
    
    return 0;
}