Cod sursa(job #1089528)

Utilizator Juve45UAIC Alexandru Ionita Juve45 Data 21 ianuarie 2014 19:06:28
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <vector>
using namespace std;
#define dmax 16001
vector <int > v[dmax];
int n, use[dmax], val[dmax];

ifstream fin("asmax.in");
ofstream fout("asmax.out");

void read()
{
    int a, b;
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>val[i];
    for(int i=1; i<n; i++)
    {
        fin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
}

int cut_tree(int vf)
{
    int k=0;
    use[vf]=1;
    if(v[vf].size()==1)
        return val[vf];
    else
    {
        for(int i=0; i<v[vf].size(); i++)
        {
            if(use[v[vf][i]]==0)
                if(cut_tree(v[vf][i])>0)
                    k=k+cut_tree(v[vf][i]);
        }
        if(k+val[vf]>k)
            return k+val[vf];
else return k;
    }

}

int maxv()
{int maximv=-99999999;
    for(int i=1;i<=n;i++)
        if(val[i]>maximv)
            maximv=val[i];
        return maximv;
}

int main()
{

    read();

    int al=cut_tree(1);
    if(al)
    fout<<al;
    else fout<<maxv();
    return 0;
}