Cod sursa(job #1444342)

Utilizator ChallengeMurtaza Alexandru Challenge Data 29 mai 2015 16:32:23
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 0.98 kb
#include <fstream>
#include <vector>

using namespace std;

const char InFile[]="asmax.in";
const char OutFile[]="asmax.out";
const int MaxN=16111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,sol,x,y,v[MaxN],best[MaxN],israd[MaxN],viz[MaxN];
vector<int> a[MaxN];

void dfs(int x)
{
    viz[x]=1;
    best[x]=v[x];
    for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)
    {
        if(viz[*it]==0)
        {
            dfs(*it);
            if(best[*it]>0)
            {
                best[x]+=best[*it];
            }
        }
    }
}

int main()
{
    fin>>N;
    for(register int i=1;i<=N;++i)
    {
        fin>>v[i];
    }
    for(register int i=1;i<N;++i)
    {
        fin>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
    fin.close();

    sol=-(1<<30);
    for(register int i=1;i<=N;++i)
    {
        if(viz[i]==0)
        {
            dfs(i);
        }
        sol=max(sol,best[i]);
    }

    fout<<sol;
    fout.close();
    return 0;
}