void ask_next(int boy_index); void ask(int boy_index, int girl_index) { if (p[girl_index] == -1) p[girl_index] = boy_index; else { if (priority(girl_index, p[girl_index]) // O(1) хуже priority(girl_index, boy_index)) swap(p[girl_index], boy_index); ask_next(boy_index); // reject } } void ask_next(int boy_index) { int girl = priority_list[boy_index].pop_best(); ask(girl); } // O(V+E)