Cod sursa(job #1430038)

Utilizator GinguIonutGinguIonut GinguIonut Data 7 mai 2015 19:56:26
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#define dim 16001
#include <queue>
#include <vector>
#define INF 1 << 29
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
vector <short int> G[dim];
queue <int> Q;
int val[dim],n,a,b,nod,node,viz[dim],leg,Max,i;
int main()
{
    fin>>n;
    Max-=INF;
    for(i=1;i<=n;i++)
        fin>>val[i];
    for(i=1;i<n;i++)
    {
        fin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    for(i=1;i<=n;i++)
        if(G[i].size()==1)
            Q.push(i);
    while(!Q.empty())
    {
        node=Q.front();
        for(i=0;i<G[node].size();i++)
        {
            nod=G[node][i];
            leg=G[nod].size();
            if(viz[nod]<leg)
            {
                viz[node]++;
                viz[nod]++;
                if(val[node]+val[nod]>=val[nod])
                    val[nod]+=val[node];
                if(viz[nod]+1==leg)
                    Q.push(nod);
            }
            if(val[node]>Max)
                Max=val[node];
        }
        Q.pop();
    }
    fout<<Max;
    return 0;
}