+\h{Detekce cyklù v orientovaném grafu}
+
+Algoritmus na vypsání {\I v¹ech} cyklù v grafu si neuká¾eme, nebo» tento
+problém je tì¾¹í, ne¾ se zdá. Mimo jiné proto, ¾e cyklù mù¾e být a¾
+exponenciálnì mnoho. Zde probíráme nalezení {\I nìjakého} cyklu v orientovaném
+grafu.
+
+\s{Definice:} $\<DFS>(G)$ znaèíme spu¹tìní DFS tak, aby pro¹el v¹echny vrcholy.
+
+Realizace pøedchozí definice je jednoduchá.
+\algo
+\:Dokud existuje nenav¹tívený vrchol $v$:
+\::Spustíme $\<DFS>(v)$.
+\endalgo
+
+\s{Lemma:} Cyklus je v grafu $G$ právì tehdy, kdy¾ $\<DFS>(G)$ oznaèí nìjakou
+hranu jako zpìtnou.
+
+\proof Buï $v_1,v_2,\dots,v_k,v_1$ cyklus v grafu $G$ a $v_1$ buï BÚNO vrchol s
+max. $\<out>(v_i)$. Pak jistì $\<out>(v_k) < \<out>(v_1)$. Jakého typu je hrana
+$(v_k,v_1)$?
+
+Uva¾me poøadí opou¹tìní vrcholù na rùzných typech hran $(x,y)$. Na
+stromové, dopøedné a pøíèné hranì platí $\<out>(x) > \<out>(y)$, na zpìtné
+$\<out>(x) < \<out>(y)$. Tedy $(v_k,v_1)$ musí být nutnì zpìtná.
+
+V opaèném smìru nalezneme pro zpìtnou hranu $(x,y)$ cestu z $y$ do $x$ po
+stromových hranách. \qed
+
+\s{Algoritmus:}
+\algo
+\algin Graf $G$
+\:Spustíme $\<DFS>(G)$ a pøi nalezení první zpìtné hrany $(u,v)$ zastavíme.
+\:Pokud jsme nalezli zpìtnou hranu:
+\::Vypí¹eme v¹echny vrcholy mezi $(u,v)$ ze zásobníku onoho DFS v opaèném poøadí.
+\:jinak
+\::Graf je acyklický.
+\endalgo
+
+\s{Èasová i pamì»ová slo¾itost} je $\O(m+n)$, nebo» se jedná o triviálnì upravené DFS.
+
+\h{Topologické uspoøádání DAGu (grafu bez orientovaných cyklù)}
+
+\s{Definice:} {\it Topologické uspoøádání} acyklického orientovaného grafu $G$ o $k$
+vrcholech je ohodnocení vrcholù èísly $1\dots k$ tak, ¾e $(u,v) \in E(G)
+\Rightarrow f(u) < f(v)$.
+
+\s{Pozorování:} Vhodné topologické uspoøádání nám dá napøíklad $\<out>$ z
+$\<DFS>(G^R)$. $G^R$~budi¾ graf $G$, ve kterém otoèíme orientace v¹ech hran.
+
+\h{Hledání mostù v neorientovaném grafu}
+
+\s{Definice:} Hrana $uv \in E(G)$ je {\I most}, pokud se jejím odebráním
+z~grafu $G$ zvý¹í poèet komponent souvislosti tohoto grafu.
+
+\s{Pozorování:} Hrana, která je v nìjakém cyklu, nemù¾e být mostem. Z cyklu
+toti¾ lze libovolnì odebrat jednu hranu a pøesto zùstane souvislý. V¹echny
+ostatní hrany naopak mosty jsou.
+
+Mù¾e být mostem jiná hrana ne¾ stromová? Zpìtné hrany nutnì tvoøí cyklus.
+Pøíèné a dopøedné se v neorientovaném DFS neobjeví.
+
+Hledáme tedy v¹echny stromové hrany, které nejsou v ¾ádném cyklu. Projdeme graf
+zase pomocí upraveného DFS.
+
+Kdy je hrana $uv$ v nìjakém cyklu? Kdy¾ existuje cesta $v\dots w$ (a nebo
+$v=w$), zpìtná hrana $wx$ a cesta $x\dots u$ (a nebo $x=u$).
+
+\smallskip
+\s{Algoritmus} bude je¹tì trochu více upravené DFS. Pro ka¾dý vrchol~$v$ si
+budeme kromì hloubky je¹tì pamatovat $z(v)$. To bude nejmen¹í \<in> vrcholu,
+do kterého se dá dostat po zpìtných hranách z~vrcholu $v$ nebo podstromu pod ním.
+
+\algo
+\:Vstoupíme do vrcholu $u$ jako DFS.
+\:$x \la $~minimum z $\<in>(v)$ pøes v¹echny zpìtné hrany $uv$
+\:$y \la $~minimum ze $z(w)$ pøes v¹echny stromové hrany $uw$
+\:$z(u) \la \min xy$
+\:Pokud $z(u) \ge \<in>(u)$,
+\::je jistì mostem hrana, po které jsme vstoupili do $u$.
+\endalgo
+
+\s{Èasová i pamì»ová slo¾itost} tohoto upraveného DFS jsou $\O(m+n)$.
+
+\qed
+
+\h{Nejdel¹í cesta v ohodnoceném DAGu}