Cod sursa(job #2897300)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 3 mai 2022 13:02:07
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
//Ilie Dumitru
#include<cstdio>
#include<vector>
typedef long long int ll;
const int NMAX=16005;
const ll MOD=1000000007;

FILE* f=fopen("asmax.in", "r"), *g=fopen("asmax.out", "w");

int N, v[NMAX], answer, maxSum[NMAX];
std::vector<int> edges[NMAX];

void dfs(int node, int tt)
{
    int s=v[node], son;
    std::vector<int>::iterator i0, i1;
    for(i0=edges[node].begin(), i1=edges[node].end();i0!=i1;++i0)
        if((son=*i0)!=tt)
        {
            dfs(son, node);
            if(maxSum[son]>0)
                s+=maxSum[son];
        }
    maxSum[node]=s;
    if(s>answer)
        answer=s;
}

int main()
{
    int i, a, b;
    fscanf(f, "%d", &N);
    for(i=0;i<N;++i)
        fscanf(f, "%d", v+i);
    answer=v[0];
    for(i=1;i<N;++i)
    {
        fscanf(f, "%d%d", &a, &b);
        edges[--a].push_back(--b);
        edges[b].push_back(a);
    }
    dfs(0, -1);
    fprintf(g, "%d", answer);
    fclose(f);
    fclose(g);
    return 0;
}