Cod sursa(job #834896)

Utilizator ichigo2908mantu radu ichigo2908 Data 15 decembrie 2012 16:28:49
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
using namespace std;

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

vector <int> v[16001];
int val[16001],n;
bool vf[16001];

int dfs(size_t x, size_t start, size_t prev)
{
    if(v[x].size()==1 && x!=start)
        return val[x];
    else
    {
        int ss=val[x], interm, tempSuma;
        for(size_t i=0;i<v[x].size();i++)
            if(v[x][i]!=prev)
            {
                interm=v[x][i];
                tempSuma=dfs(interm,start,x);
                if(tempSuma>0)
                    ss+=tempSuma;
            }
        return ss;
    }

}

int main()
{
    int iTemp1, iTemp2;

    in>>n;
    for(int i=1;i<=n;i++)
        in>>val[i];
    for(int i=0;i<n-1;i++)
    {
        in>>iTemp1>>iTemp2;
        v[iTemp1].push_back(iTemp2);
        v[iTemp2].push_back(iTemp1);

        if(v[iTemp1].size()==1)
            vf[iTemp1]=1;
        else
            vf[iTemp1]=0;

        if(v[iTemp2].size()==1)
            vf[iTemp2]=1;
        else
            vf[iTemp1]=0;
    }

    for(int i=1;i<=n;i++)
        if(vf[i])
        {
            out<<dfs(i,i,0);
            break;
        }

    in.close();
    out.close();

    return 0;
}