Grafo = vertices + arestas

Um grafo tem vertices (nos) e arestas (conexoes).

Representacao: lista de adjacencia (dict de listas).

Big-O:
• add_vertex — O(1)
• add_edge — O(1)
• get_neighbors — O(1)
• Verificar se aresta existe — O(grau)
Python
class Graph:
    def __init__(self):
        self.adj = {}
    def add_vertex(self, v):
        if v not in self.adj:
            self.adj[v] = []
    def add_edge(self, u, v):
        self.add_vertex(u)
        self.add_vertex(v)
        self.adj[u].append(v)
        self.adj[v].append(u)
    def get_neighbors(self, v):
        return self.adj.get(v, [])