Cod sursa(job #864457)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 24 ianuarie 2013 23:27:16
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 16010
using namespace std;

int v[NMAX],n,t[NMAX],p,pmax;
bool viz[NMAX],cup[NMAX];
vector <int> G[NMAX];

void DFS(int nod)
{
    viz[nod]=true;

    t[nod]=v[nod];
    for(int i=0;i<G[nod].size();i++)
    {
        if(!viz[G[nod][i]])
        {
            DFS(G[nod][i]);
            if(t[G[nod][i]] > 0) t[nod]+=t[G[nod][i]];
        }
    }
    if(t[nod]>=0)
    {
       cup[nod]=true;
       p++;
    }
}
int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    int a,b;
    for(int i=1;i<=n-1;i++)
    {
        fin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }

    for(int i=1;i<=n;i++)
    {
        if(v[i]>=0 && cup[i]==false)
        {
            memset(viz,false,NMAX);
            memset(t,0,NMAX);
            p=0;
            DFS(i);
            if(p>pmax) pmax=p;
        }
    }

    fout<<pmax;
    return 0;
}