Inicio del ciclo de una lista
Una lista enlazada tiene \(n\) nodos con rótulos de \(1\) a \(n\). Cada nodo apunta al siguiente, y el último puede apuntar a un nodo anterior, formando un ciclo. Encuentra el nodo donde empieza el ciclo: el primero que se visita dos veces al recorrer la lista desde la cabeza. Si no hay ciclo, la respuesta es \(0\).
Seguimiento: el algoritmo de Floyd lo resuelve con \(O(1)\) memoria extra.
Entrada
La primera línea tiene \(n\) \((1 \le n \le 10^5)\) y el rótulo de la cabeza. Cada una de las siguientes \(n\) líneas tiene un rótulo \(u\) y el rótulo del nodo al que apunta, o \(0\) si \(u\) es la cola sin ciclo. Las líneas vienen en cualquier orden y todos los nodos son alcanzables desde la cabeza.
Salida
El rótulo del nodo donde empieza el ciclo, o \(0\).
Ejemplo 1
Entrada
4 3
3 2
2 4
4 1
1 2
Salida
2
Ejemplo 2
Entrada
2 1
1 2
2 1
Salida
1
Ejemplo 3
Entrada
1 1
1 0
Salida
0
Comentarios