Lista di adiacenze per un grafo non diretto

Salve salve!
Volevo chiedervi una cosa un po’ “di base”.

Se avete a che fare con un grafo non diretto ma che possiede un sacco di nodi (e che quindi non vi permette di usare una matrice) che strategia applicate?
Io ho un metodo molto brutto è complicato, ma non mi viene in mente altro:
vector< pair<int,int> > adj[]
Dove adj[X][i].first è l’iesimo nodo Y adiacente ad X, mentre adj[X][i].second è la posizione j per cui adj[Y][j].first = X, cioè rappresenta la posizione dell’arco inverso (Y->X).
Qualche consiglio per semplificare le cose? :</div>

Dipende che ci vuoi fare, tante volte basta:

vector<int> adj[MAXN]
Dove adj[v][i] è l’i-esimo nodo adiacente a v.
Se poi ti serve necessariamente l’arco inverso (ma a che ti servirebbe di preciso?) va bene come fai tu.

Io solitamente uso quella di fram, ma poi dipende dal problena

L’arco inverso mi serve per il problema “Matita”, non posso accontentarmi di avere il grafo diretto perché nel peggiore dei casi avrei tutti archi entranti in A :<div>Comunque se non ci sono modi più eleganti allora mi accontento di quello che uso, grazie mille per la pazienza :3