Търсене на покриваща гора

Цел: Да се намери гора с възможно най-много ребра, принадлежащи на неориентиран граф G с N върха и M ребра.

Идея на алгоритъма:

1. Започваме от гора, състояща се от всички върхове на G и без нито едно ребро в нея.

2. Четем ребрата едно по едно, правейки следното:

Забележки:

1. Не се проверява коректност на данните.

Бързодействие:

Приведеният алгоритъм има сложност O(N^2).

Сходни задачи и допълнителни свойства:



ИМЕ НА ЗАДАЧАТА: forest

ВХОДЕН ФОРМАТ:

* Ред 1: Цели числа N и M
  N е броят на върховете в графа (N<=1000), 
  M е броят на ребрата (неограничено), 

* Редове от 2 до M: 
  Всеки ред съдържа 2 параметъра: I и J, които описват ребро. 
  I и J са върховете, които реброто свързва.

ПРИМЕРЕН ВХОД (файл forest.in):

6 10
2 5
4 6
1 6
4 5
6 3
1 2
1 3
2 4
3 2
6 2


ИЗХОДЕН ФОРМАТ:

* редове 1..K: Съдържат ребрата от покриващата гора.
* ред K+1: Брой на дърветата в гората 

ПРИМЕРЕН ИЗХОД:

2 5
4 6
1 6
4 5
6 3
Брой на дърветата в гората: 1


Текст на алгоритъма:
(c) Skelet, 2004