QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 128 MB

#23530. Árbol filogenético

統計

Establecer las relaciones filogenéticas entre organismos es una tarea muy importante en bioinformática.

Las relaciones filogenéticas suelen representarse mediante un árbol, llamado árbol filogenético. Cada organismo corresponde a una hoja del árbol filogenético.

La longitud del camino entre dos hojas del árbol filogenético indica el grado de parentesco evolutivo entre los organismos correspondientes.

A partir de un árbol filogenético se puede definir un grafo que represente el grado de parentesco evolutivo entre los organismos.

Este grafo se llama grafo filogenético.

Un grafo filogenético de similitud $K$ se define de la siguiente manera.

Los vértices del grafo representan los organismos. Existe una arista entre dos vértices si y solo si la distancia (longitud del camino) entre sus nodos correspondientes en el árbol filogenético es como máximo $K$.

Un laboratorio construyó un grafo filogenético de similitud $3$ y después perdió los datos del árbol filogenético. Por ello quiere reconstruir el árbol.

Dado un grafo filogenético de similitud $3$, escribe un programa que encuentre un árbol filogenético que defina dicho grafo.

Ten en cuenta que el grafo de entrada siempre es conexo y se garantiza que existe un árbol filogenético correspondiente.

Entrada

La primera línea contiene un entero $N$ ($2 \le N \le 5000$), el número de vértices del grafo filogenético.

Los vértices están numerados del $1$ al $N$.

La segunda línea contiene un entero $M$ ($1 \le M \le 1000000$), el número de aristas del grafo filogenético.

Cada una de las siguientes $M$ líneas contiene dos enteros $v,w$ ($1 \le v,w \le N$), los extremos de una arista del grafo filogenético.

Salida

En la primera línea, imprime el número $S$ de aristas del árbol filogenético.

En cada una de las siguientes $S$ líneas, imprime los números $v$ y $w$ de los extremos de una arista, separados por un espacio.

Las aristas del árbol pueden imprimirse en cualquier orden.

Sin embargo, los números de nodo del $1$ al $N$ deben asignarse a las hojas.

Además, cada vértice del grafo de entrada y su hoja correspondiente del árbol filogenético deben tener el mismo número.

Los nodos internos restantes pueden numerarse arbitrariamente del $N+1$ al $S+1$. Si existe más de un árbol filogenético, encuentra e imprime cualquiera de ellos.

Ejemplos

Entrada 1

6
7
1 2
2 3
3 1
3 4
3 5
5 6
6 3

Salida 1

9
1 7
2 7
3 9
4 8
5 10
6 10
7 9
8 9
9 10

Se obtienen 100 puntos si se superan todas las pruebas; en caso contrario, 0 puntos.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.