grazie ad un amico ing inf sono riuscito a risolvere il problema:
codice:
Vettori adj,mod,nodo_livello
// adj e mod sono i vettori degli algoritmi e nodo_livello e' un vettore 
per cui memorizzo il nodo che ho al livello corrente che sto guardando e 
percio' tutti i padri correnti. Dunque nodo_livello[i] ha nel livello i 
il nodo attutualmente padre dei nodi dei livelli inferiori che sto guardando

adj[0]=0  //metto il nodo radice e poi parto da 1
nodo_livello[0]=0;
for (int i=1;i<mod.length;i++) {
    nodo_livello[mod[i]]=i;
    adj[i]=nodo_livello[mod[i]-1]  //ovvero il padre che si trova nel livello superiore
}