Ho scritto questo codice per risolvere monete a posto(monete) e l’idea è quella di spostare dal nodo figlio a quello di sopra le monete necessarie a portare il figlio ad 1(aggiungendo o togliendo da sopra), gli esempi li fa bene ma sul sito mi da output errato per tutti i case e non capisco perché. Qualcuno ha un esempio di input su cui il mio codice sbaglia?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int N;
cin>>N;
vector<int> V(N);
for(int i = 0; i<N; i++){
cin>>V[i];
}
vector<int> F(N-1);
for(int i = 0; i<N-1; i++){
cin>>F[i];
}
int ans=0;
for(int i=N-2; i>=0; i--){
if(V[i+1]>1){
V[F[i]-1]+=V[i+1]-1;
ans+=V[i+1]-1;
V[i+1]=1;
}
else{
if(V[i+1]<1){
V[F[i]-1]-=1-V[i+1];
ans+=1-V[i+1];
V[i+1]=1;
}
}/*
cout<<endl;
for(int i = 0; i<N; i++){
cout<<V[i];
}
cout<<endl;
for(int i = 0; i<N-1; i++){
cout<<F[i];
}
cout<<endl;*/
}
cout<<ans;
return 0;
}