Cod sursa(job #1718653)

Utilizator liviu23Liviu Andrei liviu23 Data 18 iunie 2016 17:27:42
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <vector>
#include <queue>
#define DIM 16005
using namespace std;

vector<int> adj[DIM];
queue<int> q;
int n,v[DIM],deg[DIM],sum[DIM];

void calculate() {
    while(!q.empty()) {
        int u=q.front();
        deg[u]=-2;
        for(int i=0;i<adj[u].size();i++) {
            if(deg[adj[u][i]]!=-2&&sum[u]>0)
                sum[adj[u][i]]+=sum[u];
            if(deg[adj[u][i]]==1&&adj[u][i]!=1)
                q.push(adj[u][i]);
            deg[adj[u][i]]--;
        }
        q.pop();
    }
}

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i],sum[i]=v[i];
    int a,b;
    for(int i=1;i<n;i++) {
        fin>>a>>b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    for(int i=1;i<=n;i++) {
        deg[i]=adj[i].size()-1;
        if(deg[i]==0)
            q.push(i);
    }
    calculate();
    int maxim=sum[1];
    for(int i=2;i<=n;i++) {
        if(sum[i]>maxim)
            maxim=sum[i];
    }
    fout<<maxim;
    return 0;
}