Cod sursa(job #1154543)

Utilizator alecsandrualex cuturela alecsandru Data 26 martie 2014 11:27:17
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int smax=-16000001,rez[16001],v[16001];
vector <int> vecini[16001];
bool viz[16001];
void dfs(int tata)
{
    int i,fiu;
    smax=max(smax,rez[tata]);
    for(i=0;i<vecini[tata].size();i++)
    {
        fiu=vecini[tata][i];
        if(viz[fiu]==0)
        {
            rez[fiu]=max(rez[tata]+v[fiu],v[fiu]);
            viz[fiu]=1;
            dfs(fiu);
            if(rez[tata]<0)
                rez[tata]=max(rez[tata],rez[fiu]+rez[tata]);
            else
                rez[tata]=max(rez[tata],rez[fiu]);
            smax=max(smax,rez[tata]);
        }
    }
}
int main()
{
    int n,i,a,b;
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }
    for(i=1;i<n;i++)
    {
        scanf("%d%d",&a,&b);
        vecini[a].push_back(b);
        vecini[b].push_back(a);
    }
    rez[1]=v[1];
    viz[1]=1;
    dfs(1);
    printf("%d",smax);
    return 0;
}