Есть лучший ответ на этот вопрос.Вы можете сделать это в O (| V | ^ 2).и с большим усилием вы можете сделать это за линейное время.
Сначала вы найдете сильно связанные компоненты G. в каждом сильном компоненте, вы ищете следующие случаи: 1) если в этом компоненте есть передний фронт, оно не является односвязным, 2) если в этом компоненте есть перекрестие, оно не является односвязным, 3) если в дереве есть хотя бы два задних ребра, укорененных в вершине u, к собственным предкам u, то ононе подключен в одиночку.
это можно сделать в O (E).(Я думаю, за исключением случая 3. Я не смог реализовать это хорошо !!).
Если ни один из вышеперечисленных случаев не произошел, вы должны проверить, есть ли на G ^ SCC перекрестная кромка или передняя кромка (граф G (с сильными компонентами, замененными одиночными узлами), поскольку у нас нет задников, это можно сделать, повторяя dfs на каждой вершине этого графа в O (| V | ^ 2).