Pagini recente » Cod sursa (job #3282448) | Cod sursa (job #1253036) | Cod sursa (job #993759) | Cod sursa (job #1278792) | Cod sursa (job #1751674)
#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;
}