Cod sursa(job #1991895)

Utilizator patcasrarespatcas rares danut patcasrares Data 18 iunie 2017 16:42:11
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n,v[16005],d[16005],c[16005],pr[16005],viz[16005],ma=-(1000*16000);
vector<int>x[16005];
vector<int>y[16005];
queue<int>q;
void ve()
{
    int nod;
    while(!q.empty())
    {
        nod=q.front();
        q.pop();
        for(int i=0;i<x[nod].size();i++)
            if(viz[x[nod][i]]==0)
            {
                viz[x[nod][i]]=1;
                d[x[nod][i]]=d[nod]+1;
                pr[x[nod][i]]=nod;
                q.push(x[nod][i]);
                y[d[x[nod][i]]].push_back(x[nod][i]);
            }
    }
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    for(int i=1;i<n;i++)
    {
        int a,b;
        fin>>a>>b;
        x[a].push_back(b);
        x[b].push_back(a);
    }
    viz[1]=1;
    d[1]=1;
    y[1].push_back(1);
    q.push(1);
    ve();
    for(int i=n;i>=1;i--)
        for(int j=0;j<y[i].size();j++)
        {
            int nod=y[i][j];
            c[nod]+=v[nod];
            if(c[nod]>0)
                c[pr[nod]]+=c[nod];
            if(c[nod]>ma)
                ma=c[nod];
        }
    fout<<ma;
}