Лес - это граф, компоненты связности которого - деревья. Просто ищите компоненты связности и проверяйте, являются ли они деревьями (можно взять алгоритм проверки графа на деревянность и допилить его с учетом нескольких компонент связности). И будет время

- меньше все равно нельзя +

памяти.
upd: насчет времени

не уверен.