To mark strong components.

Pseudo-code

TarjanDFS(𝑣, 𝑆, 𝐸, 𝑐𝑙𝑜𝑐𝑘):1Mark(𝑣)2𝑐𝑙𝑜𝑐𝑘𝑐𝑙𝑜𝑐𝑘+13𝑣.𝑝𝑟𝑒𝑐𝑙𝑜𝑐𝑘4𝑣.𝑙𝑜𝑤𝑐𝑙𝑜𝑐𝑘5𝑆.Push(𝑣)6for all edges 𝑣𝑤𝐸:7if 𝑤 is unmarked:8𝑐𝑙𝑜𝑐𝑘 TarjanDFS(𝑤,𝑆,𝐸,𝑐𝑙𝑜𝑐𝑘)9𝑣.𝑙𝑜𝑤 Min(𝑣.𝑙𝑜𝑤,𝑤.𝑙𝑜𝑤)10else:11if 𝑤.𝑟𝑜𝑜𝑡=none:12𝑣.𝑙𝑜𝑤 Min(𝑣.𝑙𝑜𝑤,𝑤.𝑝𝑟𝑒)1314if 𝑣.𝑙𝑜𝑤=𝑣.𝑝𝑟𝑒:15do:16𝑤𝑆.Pop( )17𝑤.𝑟𝑜𝑜𝑡𝑣18while 𝑤𝑣1920return 𝑐𝑙𝑜𝑐𝑘Tarjan(𝐺):1𝑐𝑙𝑜𝑐𝑘02𝑆 stack()3for all vertices 𝑣𝐺.𝑉:4Unmark(𝑣)5𝑣.𝑟𝑜𝑜𝑡none67for all vertices 𝑣:8if 𝑣 is unmarked:9𝑐𝑙𝑜𝑐𝑘 TarjanDFS(𝑣,𝑆,𝐺.𝐸,𝑐𝑙𝑜𝑐𝑘)10

Runtime

𝑂(|𝑉|+|𝐸|)