Existuje-li mezi silná souvislost, pak stačí testovat polosouvislost pouze pro jeden z těchto vrcholů. Pokud bych tak provedl kondenzaci, výsledný graf již bude obsahovat pouze jednosměrné cesty.
Není-li takový graf ani slabě souvislý, pak je odpověď triviální. V opačném případě se jedná o DAG. Ten nebude polosouvislý v případě, bude-li se cesta ze zdrojové komponenty větvit.
Důkaz: Vezmu si dva vrcholy za větvením. Budu-li hledat cestu podle směru šipek, musí se v některém vrcholu cesty spojit. Jelikož však v takovém grafu není cyklus, musí obě šipky směřovat do daného vrcholu a nemohu tedy v cestě pokračovat. Naopak budu-li hledat cestu proti směru šipek, pak se dostanu k vrcholu, kde se cesta rozdělovala, a tak opět nemohu pokračovat dále.
To zároveň znamená, že se cesty ze zdrojových komponent nesmí ani spojovat. Požaduju-li slabou souvislost, pak výsledkem musí být pouze cesta. Tzn.: polosouvislý graf je takový, který je slabě souvislý a grafem komponent silné souvislosti je cesta.
Problém je v tom, že samotná kondenzace (kontrakce hran podle silné souvislosti) je náročná.
Mohu si však zaznamenat, z které komponenty jsem tuto komponentu objevil (což je pro DFS triviální záležitost). Navíc, objevím-li vrchol z vrcholu , pak vrchol objevím z jen v případě, že leží ve stejné komponentě. Díky těmto informacím již mohu vytvořit graf komponent silné souvislosti (hrana existuje, vede-li alespoň jeden vrchol z do vrcholu z ; obráceně nemůže, neboť vy vzniknul cyklus). Budu-li se držet algoritmu z Průvodce:
Otočím orientaci hran v grafu.
Spouštím DFS z neprozkoumaných vrcholů.
Jakmile otevřu vrchol, poznačím si, odkud jsem jej otevřel.
Uzavřené vrcholy vložím do zásobníku.
Jsou-li všechny vrcholy uzavřeny, jdu dál. Jinak
Vyndám vrchol ze zásobníku. Nemám-li označeno, v jaké komponentě leží, provedu DFS a objevené vrcholy označím číslem komponenty.
Není-li zásobník prázdný, . Jinak vytvoř prázdný (bezhranový) graf, kde vrcholy=komponenty.
Pro každý vrchol zjisti, v jaké komponentě leží vrchol, který jej otevřel (otec - v ).
Leží-li v jiné komponentě než momentální vrchol, vytvoř hranu otecmomentální vrchol
Jakmile jsou všechny vrcholy prozkoumány, zjisti, zdali je graf cesta. Pokud ano, graf je slabě souvislý.
Složitost: DFS je lineární s velikostí grafu; ačkoli jej musím spouštět vícekrát, jdu pouze přes neprozkoumané vrcholy. Zaznamenávání vstupu je lineárně závislé na počtu vrcholů, stejně tak jako konstrukce finálního grafu.