Нет необходимости хранить и `visited` и `components_list`, потому что `visited[i]` это то же самое, что и `components[i] == -1`