Cod sursa(job #2181616)

Utilizator mihaicivMihai Vlad mihaiciv Data 21 martie 2018 19:20:53
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 40001
#define inf 1000001
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
vector <int> a[nmax];
int n,v[nmax],vis[nmax],D[nmax][4];
void citire() {
    f>>n;
    for (int i=1;i<=n;i++) {
        f>>v[i];
    }
    int x,y;
    for (int i=1;i<n;i++) {
        f>>x>>y;
        a[x].push_back(y);
        a[y].push_back(x);
    }
}
void DFS(int x) {
    vis[x]=1;
    int Suma=0;
    int Smax=-inf;
    for (int i=0;i<a[x].size();i++) {
        int p=a[x][i];
        if (vis[p]==0) {
            DFS(p);
            if (D[p][1]>0) {
                Suma=Suma+D[p][1];
            }
            Smax=max(Smax,D[p][1]);
            Smax=max(Smax,D[p][0]);
        }
    }
    D[x][1]=v[x]+Suma;
    D[x][0]=Smax;
}
void rez() {
    DFS(1);
    g<<max(D[1][1],D[1][0]);
    /*
    for (int i=1;i<=n;i++) {
        cout<<D[i][1]<<" "<<D[i][0]<<"\n";
    }
    */
}
int main() {
    citire();
    rez();
    return 0;
}