Icono
|Estudiar
TemarioEstructuras de datos y programación avanzadaTema 1

Tema 1

Grafos y algoritmos sobre grafos

Patrón de examen

Dijkstra para camino más corto con pesos no negativos. BFS para camino más corto sin pesos. Kruskal/Prim para MST.

Explicación

Conceptos de grafos

  • Grafo: conjunto de vértices (nodos) y aristas (conexiones)
  • Dirigido: las aristas tienen dirección (u → v)
  • No dirigido: las aristas son bidireccionales
  • Ponderado: las aristas tienen peso/costo

Algoritmos clave

Dijkstra — Camino más corto con pesos ≥ 0

Usa priority_queue (min-heap). Complejidad: O((V+E) log V).

priority_queue<pair<int,int>, vector<pair<int,int>>, greater<>> pq;
dist[inicio] = 0;
pq.push({0, inicio});
while (!pq.empty()) {
    auto [d, u] = pq.top(); pq.pop();
    if (d > dist[u]) continue;
    for (auto [v, w] : adj[u])
        if (dist[u] + w < dist[v]) {
            dist[v] = dist[u] + w;
            pq.push({dist[v], v});
        }
}

Union-Find (DSU) — Componentes conexas

Estructura para unir conjuntos y verificar conectividad en O(α(n)) ≈ O(1).

Árbol de expansión mínima (MST)

  • Kruskal: ordenar aristas por peso + Union-Find. O(E log E).
  • Prim: similar a Dijkstra. O((V+E) log V).