Cod sursa(job #2050538)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 28 octombrie 2017 10:21:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>

using namespace std;
int leg[16004],tata[16004];
vector <int> var;
vector <int> g[16004];
bitset <16004> viz;
int n,x,y,sm=-0x3f3f3f,v;
int dfs(int nod)
{
    if(viz[nod])
        return leg[nod];
    viz[nod]=1;
    leg[nod]=var[nod];
    int l=g[nod].size();
    sm=max(sm,leg[nod]);
    for(int i=0;i<l;++i)
    {
        if(tata[nod]!=g[nod][i])
        {
            tata[g[nod][i]]=nod;
            v=dfs(g[nod][i]);
            if(v>0)
                leg[nod]+=v, sm=max(sm,leg[nod]);
        }
    }
    return leg[nod];
}
int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    var.push_back(0);
    scanf("%d\n%d", &n,&x);
    var.push_back(x);
    for(int i=1;i<n;i++)
    {
        scanf(" %d", &x);
        var.push_back(x);
    }
    for(int i=0;i<n-1;i++)
    {
        scanf("\n%d %d", &x,&y);
        g[x].push_back(y);
        g[y].push_back(x);
    }
    dfs(1);
    cout<<sm;
    return 0;
}