Cod sursa(job #1751674)

Utilizator mitroi_stefan_danielMitroi Stefan-Daniel mitroi_stefan_daniel Data 1 septembrie 2016 18:34:09
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

int a[100],b[100],v[100];
bool viz[100];
int posRoot;
int func(int param){

    if(viz[param]==true){
        return b[param];
    }
    if(param==0){
        return v[posRoot];
    }

    if(v[param]>v[param]+func(a[param])){
        b[param]=v[param];
        viz[param]=true;
        return b[param];
    }
    else{
        b[param]=v[param]+func(a[param]);
        viz[param]=true;
        return b[param];
    }

}

int main(){

    int n,i,x,y;
    int max=0,result;
    ifstream f("asmax.in");
    ofstream g("asmax.out");
    priority_queue<int> q;

    f>>n;
    for(i=1;i<=n;i++){
        f>>v[i];
        a[i]=0;
        viz[i]=false;
    }

    for(i=1;i<=n;i++){
        f>>x>>y;
        a[x]=y;
    }
    for(i=1;i<=n;i++){
        if(a[i]==0){
            //cout<<func(i)<<endl;
            q.push(func(i));
            posRoot=i;
        }
        else {
          //  cout<<func(a[i])<<endl;
            q.push(func(a[i]));

            //result=func(a[i]);
            //if(result>max){
           //     max=result;
           // }
        }
    }
    g<<q.top();
    return 0;
}