Credo che tutto questo dipenda dal fatto che ci sono cin e cin.getline in serie tra di loro
infatti tempo fa ho avuto lo stesso problema, il programma non aspettava che inserissi un valore e stampava a video senza attendere l'inserimento di dato da parte dell'utente.


se il tuo programma dice
inserisci il primo vertice e poi ti dice valore non consentito evidentemente la funzione atol resituisce uno 0 perchè lavora con uno spazio vuoto e per tal motivo ti dice che il valore non è valido.


Ora,ho provato a compilare il tuo programma ma manca qualche funzione se non sbaglio e c'è qualche errore,cmq io avevo risolto mettendo


while(cin.get()!='\n');



o prima dei cin o prima dei cin.getline,prova un po' a fare tentativi