Cod sursa(job #1998911)

Utilizator victoreVictor Popa victore Data 9 iulie 2017 16:46:45
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

const int nmax=16005;

vector<int> g[nmax];
int d[nmax],v[nmax],n,maxim,smax=-16000006;
bool viz[nmax];

inline int max(int a,int b)
{
    if(a>b)
        return a;
    return b;
}

inline void dfs(int node)
{
    viz[node]=1;
    int i,currnode;
    for(i=0;i<g[node].size();++i)
    {
        currnode=g[node][i];
        if(viz[currnode])
            continue;
        dfs(currnode);
        d[node]=max(d[node],max(d[node]+d[currnode],d[currnode]+v[node]));
    }
    if(d[node]>smax)
        smax=d[node];
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    int i,x,y;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&v[i]),d[i]=v[i];
    for(i=1;i<n;++i)
    {
        scanf("%d%d",&x,&y);
        g[x].push_back(y);
        g[y].push_back(x);
    }
    dfs(1);
    printf("%d",smax);
}