OIS_Money 10/100

Di recente mi sono imbattuto nel problema money. Purtroppo dopo svariati tentativi, sono riuscito a risolvere solo il caso base, cioè quello in cui una persona darà i soldi direttamente a chi glieli ha prestati, avete qualche consiglio?
Non allego nemmeno il codice, perchè nel mio ragionamento mi ritrovo in grafo quadrato, quindi non so da dove fare partire la ricerca riguardante a quale amico conviene dare i soldi. Come potrei fare? finora ho provato a tenere conto di cosa viene prima e di cosa viene dopo, soltanto grazie a un vector<vector. Purtroppo so che il mio ragionamento è sbagliato :confused:

Risolto qualche anno fa e non ricordo bene ma lascia da parte i grafi è un problema di contabilità tipico di ragioneria, partita doppia (dare, avere).
Fatte le compensazioni separa i debitori dai creditori e da quelli che hanno saldo nullo).
Poi eleggi un creditore a cassiere: tutti i debitori salderanno il loro debito pagando al cassiere e tutti i creditori riscuoteranno dal cassiere ciò che spetta loro. (Non più di N-1 operazioni perché uno o più amici, o anche tutti al limite, dopo le compensazioni potrebbero trovarsi con un saldo nullo e quindi non devono dare niente e non devono avere niente!. Anche non ci fosse nessuno a saldo nullo avremmo K debitori e N-K creditori quindi avremmo K operazioni di pagamento al cassiere da parte dei debitori e N-k-1 operazioni di prelievo da parte dei creditori (-1 perché un creditore è il cassiere) ed in totale le operazioni saranno K+N-K-1=N-1.

ti ringrazio, mi avevano detto di risolverlo con i grafici, ma con il tuo metodo sono arrivato molto prima, grazie

ora tralasciando il fatto che il mio codice viola i limiti di memoria, finalmente funziona, ringrazio, vedrò di ottimizzarlo nei giorni a venire