Cod sursa(job #951295)

Utilizator classiusCobuz Andrei classius Data 19 mai 2013 23:47:37
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");


int main()
{
    vector<int> v(1);
    int n;

    f>>n;
    for(int i=0;i<n;i++){
        int x;
        f>>x;
        v.push_back(x);
    }
    vector<int> grd(n+1,0);
    vector<vector<int>> lgt(n+1);

    for(int i=1;i<n;i++){
        int x,y;
        f>>x>>y;
        grd[x]++;
        grd[y]++;
        lgt[x].push_back(y);
        lgt[y].push_back(x);
    }
    vector<bool> ok(n+1,1);
    queue<int> nd;
    for(int i=1;i<=n;i++)
        if(grd[i]==1)
            nd.push(i);

    int mx=16000*(-1000);
    while(!nd.empty()){
        int x=nd.front();
        nd.pop();

        ok[x]=0;
        if(v[x]>mx)
            mx=v[x];
        if(!grd[x])
            break;
        int i;
        for(i=0;i<lgt[x].size();i++)
            if(ok[lgt[x][i]])
                break;

        int a=lgt[x][i];
        if(v[a]+v[x]>v[a])
            v[a]=v[x]+v[a];
        grd[a]--;
        int dmmy=grd[a];
        if(dmmy==1||dmmy==0)
            nd.push(a);
    }
    g<<mx;

    return 0;
}