Cod sursa(job #1336915)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 8 februarie 2015 14:06:47
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 16005
using namespace std;
FILE *f=fopen("asmax.in","r");
FILE *g=fopen("asmax.out","w");
int k[nmax],s[nmax];
int q[nmax],viz[nmax],n;
vector <int> v[nmax];

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

}

int main()
{
    int i,j,a,b;
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
            fscanf(f,"%d",&k[i]);
    for (i=1;i<=n-1;i++) {
            fscanf(f,"%d %d",&a,&b);
            q[b]=1;
            v[a].push_back(b);
            v[b].push_back(a);
    }
    for (i=1;i<=n;i++)
        if (q[i]==0) {
            viz[i]=1;
            dfs(i);
        }
    int m=-1<<20;
    for (i=1;i<=n;i++) m=max(m,s[i]);
    fprintf(g,"%d",m);
    return 0;
}