Ваш подход правильный.Вы не можете сделать это лучше.
Причина, по которой это работает, заключается в том, что если вы помечаете вершины по их глубине во время выполнения BFS, то все ребра соединяют либо одинаковые метки, либо метки, которые отличаются на одну.Понятно, что если есть ребро, соединяющее те же метки, то возникает нечетный цикл.Если нет, то мы можем покрасить все нечетные метки в белый цвет, а все четные метки - в черный.