Cod sursa(job #2209490)

Utilizator EdgeLordXDOvidiuPita EdgeLordXD Data 3 iunie 2018 17:10:59
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 32002
ifstream in("asmax.in");
ofstream out("asmax.out");
int xd[N];
int g[N];
int a[N], b[N], c[N];
bool v[N];
int q[N];
int nr=0,k=0;
void add(int x, int y){
    a[++k]=y;
    b[k]=c[x];
    c[x]=k;
}
int main(){
    int n,i,x,y,m=-1000*N/2;
    in>>n;
    for(i=1; i<=n; ++i)
        in>>xd[i];
    for(i=1; i<n; ++i){
        in>>x>>y;
        add(x,y);
        add(y,x);
        ++g[x];
        ++g[y];
    }
    int u=-1, p=0,st;
    for(i=1; i<=n; ++i)
        if(g[i]==1)
            q[++u]=i;
    while(p<=u){
        i=q[p++];
        st=c[i];
        if(!v[i]){
            v[i]=1;
            //cout<<i<<":\n";
            while(st){//cout<<a[st]<<"\n";
                if(!v[a[st]]){
                    if(xd[i]>=0)
                        xd[a[st]]+=xd[i];
                    m=max(m,xd[a[st]]);
                    q[++u]=a[st];
                }
                st=b[st];
            }
        }
       // cout<<m<<"\n\n";
    }
    out<<m;
    return 0;
}