From: Martin Mares Date: Tue, 23 Jan 2007 17:08:13 +0000 (+0100) Subject: Revize analyzy Dinicova algoritmu a obrazku okolo. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=73e881dcd496b63d2ef59b8fe22fea2706732d75;p=ga.git Revize analyzy Dinicova algoritmu a obrazku okolo. --- diff --git a/2-dinic/2-dinic.tex b/2-dinic/2-dinic.tex index 58cba61..1d3cb38 100644 --- a/2-dinic/2-dinic.tex +++ b/2-dinic/2-dinic.tex @@ -23,6 +23,7 @@ kdyby neuva \:Zaèneme s~libovolným tokem~$f$, napøíklad prázdným (v¹ude nulovým). \:Iterativnì vylep¹ujeme tok pomocí zlep¹ujících tokù: {\I (vnìj¹í cyklus)} \::Sestrojíme sí» rezerv: vrcholy a hrany jsou tyté¾, kapacity jsou urèeny rezervami v~pùvodní síti. +Dále budeme pracovat s~ní. \::Najdeme nejkrat¹í $st$-cestu. Kdy¾ ¾ádná neexistuje, skonèime. \::Proèistime sí», tj. ponecháme v ní pouze vrcholy a hrany na nejkrat¹ích $st$-cestách. \::Najdeme v~proèi¹tìné síti blokující tok $f_B$: @@ -56,30 +57,26 @@ Ozna \endlist Takto kroky 5 a 12 dohromady spotøebují èas $\O(m)$. \:Jeden prùchod vnìj¹ím cyklem tedy trvá $\O(mn)$. + \:Jak za chvíli doká¾eme, ka¾dým prùchodem vnìj¹ím cyklem $l$ vzroste, tak¾e prùchodù + bude maximálnì~$n$ a celý algoritmus tak pobì¾í v~èase $\O(n^2m)$. \endlist +\s{Korektnost algoritmu:} +Kdy¾ se Dinicùv algoritmus zastaví, nemù¾e u¾ existovat ¾ádná zlep¹ující cesta +(viz krok~4) a tehdy, jak u¾ víme z~analýzy F-F algoritmu, je nalezený tok maximální. + \s{Vìta:} V~ka¾dém prùchodu Dinicova algoritmu vzroste $l$ alespoò~o~1. -\s{Dùsledek:} -Vnìj¹ím cyklem projdeme $\O(n)$-krát, proto¾e nejdel¹í cesta bude mít -délku $\leq n$. Celková slo¾itost celého algoritmu proto bude $\O(n^2m)$ - -\s{Korektnost algoritmu} -plyne z korektnosti F-F algoritmu. Kdy¾ se Dinicùv -algoritmus zastaví, musí vydat maximální tok. Pokud ne, tak podle F-F algoritmu -existuje zlep¹ující cesta, ale to je ve sporu s~krokem~4, který po¾aduje, aby ¾ádná -taková cesta neexistovala. - -\s{Dùkaz vìty:} +\proof Podíváme se na~prùbìh jednoho prùchodu vnìj¹ím cyklem. Délku aktuálnì nejkrat¹í $st$-cesty oznaème~$l$. V¹echny pùvodní cesty délky~$l$ se bìhem prùchodu zaruèenì nasytí, proto¾e tok~$f_B$ je blokující. Musíme v¹ak dokázat, ¾e nemohou vzniknout ¾ádné nové cesty délky~$l$ nebo men¹í. V~síti rezerv toti¾ mohou hrany nejen ubývat, ale i pøibývat: pokud po¹leme tok po~hranì, po~které je¹tì nic -neteklo, mù¾e se stát, ¾e v~protismìru z~dosud nulové rezervy vyrobíme -nenulovou. Rozmysleme si tedy, jaké hrany mohou pøibývat: +neteklo, tak v~protismìru z~dosud nulové rezervy vyrobíme nenulovou. +Rozmysleme si tedy, jaké hrany mohou pøibývat: Vnìj¹í cyklus zaèíná s neproèi¹tìnou sítí. Pøíklad takové sítì je na~následujícím obrázku. Po~proèi¹tìní zùstanou v~síti jen èerné hrany, tedy hrany vedoucí z~$i$-té @@ -91,9 +88,6 @@ je barevn Nové hrany mohou vznikat výhradnì jako opaèné k~èerným hranám (hrany ostatních barev padly za obì» proèi¹tìní). Jsou to tedy v¾dy zpìtné hrany vedoucí z~$i$-té vrstvy do~$(i-1)$-ní. - -\figure{dinic-zpetnahrana.eps}{Vznik nové zpìtné hrany}{0.4\hsize} - Vznikem nových hran by proto mohly vzniknout nové $st$-cesty, které pou¾ívají zpìtné hrany. Jen¾e $st$-cesta, která pou¾ije zpìtnou hranu, musí alespoò jednou skoèit o~vrstvu zpìt a nikdy nemù¾e skoèit o~více ne¾ jednu vrstvu dopøedu, a~proto je její @@ -120,15 +114,25 @@ d \h{Speciální sítì (ubíráme na obecnosti)} -Dále se budeme vìnovat modifikacím Dinicova algoritmu na speciální druhy sítí, -kde je mo¾né dostat lep¹í èasovou slo¾itost ne¾ v~obecném pøípadì. +Pøi pøevodu rùzných úloh na~hledání maximálního toku èasto dostaneme sí» v~nìjakém +speciálním tvaru -- tøeba s~omezenými kapacitami èi stupni vrcholù. Podíváme se +proto podrobnìji na~chování Dinicova algoritmu v~takových pøípadech a uká¾eme, +¾e èasto pracuje pøekvapivì efektivnì. \s{Jednotkové kapacity:} -V¹echny rezervy jsou jen 0 nebo~1. Na $st$-cestì má v¹echno kapacitu/rezervu~1. -Mù¾eme poslat~1~a rovnou celou cestu zahodit -- není potøeba si pamatovat minimum z~rezerv. +Pokud sí» neobsahuje cykly délky~1 (dvojice navzájem opaèných hran), v¹echny rezervy +jsou jen 0 nebo~1. Pokud obsahuje, mohou rezervy být i dvojky, a~proto sí» upravíme tak, +¾e ke~ka¾dé hranì pøidáme hranu opaènou s~nulovou kapacitou a rezervu proti smìru +toku pøiøkneme jí. Vzniknou tím sice paralelní hrany, ale to tokovým algoritmùm +nikterak nevadí.% +\foot{Èasto se to implementuje tak, ¾e protismìrné hrany vùbec nevytvoøíme a kdy¾ +hranu nasytíme, tak v~síti rezerv prostì obrátíme její orientaci.} + +Pøi hledání blokujícího toku tedy budou mít v¹echny hrany na~nalezené $st$-cestì +stejnou, toti¾ jednotkovou, rezervu, tak¾e v¾dy z~grafu odstraníme celou cestu. Kdy¾ máme $m$ hran, poèet zlep¹ení po cestách délky $l$ bude maximálnì $m/l$. Proto slo¾itost podkrokù 9, 10 a 11 bude $m/l \cdot \O(l) = \O(m)$.% -\foot{Nebo by ¹lo argumentovat, ¾e ka¾dou hranu pou¾ijeme jen $1\times$.} +\foot{Nebo by ¹lo argumentovat, tím ¾e ka¾dou hranu pou¾ijeme jen $1\times$.} Tedy pro jednotkové kapacity dostáváme slo¾itost $\O(nm)$. \s{Jednotkové kapacity znovu a lépe:} @@ -145,40 +149,42 @@ Ka nejvý¹e $\vert f_R \vert$ iterací. Proto bychom chtìli omezit velikost toku $f_R$. Napøíklad øezem. -Najdeme v síti rezerv øez $C$. Kde ho vzít?\foot{Pøeci v øeznictví. Kdepak, spí¹e v cukrárnì. +Najdeme v síti rezerv nìjaký dost malý øez $C$. Kde ho vzít?\foot{Pøeci v øeznictví. Kdepak, spí¹e v cukrárnì. Myslíte, ¾e v cukrárnì mají Dinicovy øezy? Myslím, ¾e v cukrárnì je vìt¹ina øezù minimální. {\sl (odposlechnuto na~pøedná¹ce)}} Poèítejme jen hrany zleva doprava. Tìch je jistì nejvý¹e $m$ a tvoøí alespoò $k$ rozhraní mezi vrstvami. Tedy existuje rozhraní vrstev s~nejvý¹e $m/k$ hranami\foot{Princip holubníku a nìjaká ta $\pm1$.}. -Toto rozhraní je øez. Tedy existuje øez $C$, pro nìj¾ $\vert C\vert \leq m/k$, +Toto rozhraní je øez. Tedy existuje øez~$C$, pro nìj¾ $\vert C\vert \leq m/k$, a~algoritmu zbývá maximálnì $m/k$ dal¹ích krokù. Celkový poèet krokù je nejvý¹ $k + m/k$, tak¾e staèí zvolit $k = \sqrt{m}$ a získáme odhad na~poèet krokù $\O(\sqrt{m})$. -Celkovì slo¾itost Dinicova algoritmu pro jednotkové kapacity znovu a lépe -je $\O(\sqrt{m} \cdot m) = \O(m^{3/2})$. Pomohli jsme si pro øídké grafy. +Tím jsme dokázali, ¾e celková slo¾itost Dinicova algoritmu pro jednotkové +kapacity je $\O(m^{3/2})$. Tím jsme si pomohli pro øídké grafy. \s{Jednotkové kapacity a jeden ze stupòù roven 1:} Úlohu hledání maximálního párování v~bipartitním grafu, pøípadnì hledání vrcholovì disjunktních cest v~obecném grafu lze pøevést (viz pøedchozí kapitola) -na~hledání maximálního toku v~síti, v~ní¾ $\forall v \neq s,t: \min(\deg^-(v), \deg^+(v)) \leq 1$. -Pro takovou sí» mù¾eme odhad je¹tì tro¹ku upravit. My¹lenka je stejná jako minule. Pokusíme -se nalézt v síti po $k$ krocích nìjaký malý øez. Místo rozhraní budeme hledat jednu malou -vrstvu a z malé vrstvy vytvoøíme malý øez: Pro ka¾dý vrchol z vrstvy vezmeme tu hranu, +na~hledání maximálního toku v~síti, v~ní¾ má ka¾dý vrchol~$v\ne s,t$ buïto vstupní +nebo výstupní stupeò roven jedné. +Pro takovou sí» mù¾eme pøedchozí odhad je¹tì tro¹ku upravit. Pokusíme +se nalézt v síti po~$k$~krocích nìjaký malý øez. Místo rozhraní budeme hledat jednu malou +vrstvu a z malé vrstvy vytvoøíme malý øez tak, ¾e pro ka¾dý vrchol z vrstvy vezmeme tu hranu, která je ve svém smìru sama. \figure{dinic-vrcholrez.eps}{Øez podle vrcholù ve vrstvì}{0.2\hsize} -Po $k$ krocích máme alespoò $k$ vrstev. Tedy existuje vrstva $\delta$ s nejvý¹e $n/k$ vrcholy. +Po $k$ krocích máme alespoò $k$ vrstev, a~proto existuje vrstva $\delta$ s nejvý¹e $n/k$ vrcholy. Tedy existuje øez $C$ o~velikosti $\vert C\vert \leq n/k$ (získáme z vrstvy $\delta$ vý¹e popsaným postupem). -Algoritmu zbývá do konce $\leq n/k$ iterací vnìj¹ího cyklu, celkem tedy udìlá $k + n/k$ krokù. +Algoritmu zbývá do konce $\leq n/k$ iterací vnìj¹ího cyklu, celkem tedy udìlá $k + n/k$ iterací. Nyní staèí zvolit $k = \sqrt{n}$ a slo¾itost -celého algoritmu vyjde $\O(\sqrt{n}\cdot m)$\foot{Poèet iterací vnìj¹ího cyklu je $\O(\sqrt{n})$ a -vnitøní cyklus má $\O(m)$.}. +celého algoritmu vyjde $\O(\sqrt{n}\cdot m)$. \s{Tøetí pokus pro jednotkové kapacity bez omezení na stupnì vrcholù v síti:} Hlavní my¹lenkou je opìt po $k$ krocích najít nìjaký malý øez. Najdeme dvì malé sousední vrstvy a v¹echny hrany mezi nimi budou tvoøit námi hledaný malý øez. +Budeme tentokrát pøedpokládat, ¾e na¹e sí» není multigraf, pøípadnì ¾e +násobnost hran je alespoò omezena konstantou. Oznaème $s_i$ poèet vrcholù v $i$-té vrstvì. Souèet poètu vrcholù ve dvou sousedních vrstvách oznaèíme $t_i = s_i + s_{i+1}$. Bude tedy platit nerovnost: @@ -196,10 +202,10 @@ maxim Za jednu iteraci velkého cyklu projdeme malým cyklem maximálnì tolikrát, o kolik se v nìm zvedl tok, proto¾e ka¾dá zlep¹ující cesta ho zvedne alespoò o $1$. Zlep¹ující cesta se tedy hledá maximálnì $\vert f\vert$-krát za celou dobu bìhu algoritmu. -Cestu najedeme v èase $\O(n)$. Celkem na hledání +Cestu najedeme v èase $\O(n)$. Celkem na~hledání cest spotøebujeme $\O(\vert f\vert\cdot n)$ za celou dobu bìhu algoritmu. -Nesmíme ale zapomenout na cleanupy. V jedné iteraci velkého cyklu stojí cleanupy $\O(m)$ a velkých +Nesmíme ale zapomenout na èi¹tìní. V jedné iteraci velkého cyklu nás stojí èi¹tìní $\O(m)$ a velkých iterací je $\leq n$. Proto celková slo¾itost algoritmu èiní $\O(\vert f\vert n + nm)$ Pokud navíc budeme pøedpokládat, ¾e kapacita hran je nejvý¹e~$C$ a $G$ není multigraf, @@ -209,9 +215,8 @@ $\O(Cn^2 + nm)$. \h{Scaling kapacit} Základní my¹lenka je podobná, jako u algoritmu pro tøídìní dlouhých èísel postupnì po øádech pomocí -radix-sortu. Pro jistotu si ho pøipomeòme. Algoritmus nejprve setøídí èísla podle poslední% -\foot{Poslední cifrou myslíme nejménì významnou cifru.} -cifry, poté podle pøedposlední, pøedpøedposlední a tak dále. +radix-sortu. Pro jistotu si ho pøipomeòme. Algoritmus nejprve setøídí èísla podle poslední +(nejménì významné) cifry, poté podle pøedposlední, pøedpøedposlední a tak dále. \figure{dinic-sort.eps}{Kroky postupného tøídìní podle øádù}{0.4\hsize} diff --git a/2-dinic/dinic-vrcholrez.eps b/2-dinic/dinic-vrcholrez.eps index 4458215..a0d5bee 100644 --- a/2-dinic/dinic-vrcholrez.eps +++ b/2-dinic/dinic-vrcholrez.eps @@ -1,11 +1,11 @@ %!PS-Adobe-2.0 EPSF-2.0 -%%Title: Diagram1.dia +%%Title: Diagram2.dia %%Creator: Dia v0.94 -%%CreationDate: Sun Mar 26 18:47:25 2006 -%%For: bernard +%%CreationDate: Tue Jan 23 17:57:45 2007 +%%For: mares %%Orientation: Portrait %%Magnification: 1.0000 -%%BoundingBox: 0 0 195 210 +%%BoundingBox: 0 0 196 210 %%BeginSetup %%EndSetup %%EndComments @@ -118,109 +118,105 @@ putinterval /start_ol { gsave 1.1 dpi_x div dup scale} bind def /end_ol { closepath fill grestore } bind def 28.346000 -28.346000 scale --5.000000 -8.200000 translate +-2.500000 -9.400000 translate %%EndProlog 1.000000 1.000000 1.000000 srgb -n 7.862959 4.500000 0.950000 3.650000 0 360 ellipse f +n 5.392537 5.700000 0.950000 3.650000 0 360 ellipse f 0.100000 slw [] 0 sd [] 0 sd 0.000000 0.000000 0.000000 srgb -n 7.862959 4.500000 0.950000 3.650000 0 360 ellipse cp s +n 5.392537 5.700000 0.950000 3.650000 0 360 ellipse cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 5.070710 1.819060 m 7.498637 4.266877 l s +n 2.600247 3.019000 m 5.028223 5.466876 l s [] 0 sd 0 slj 0 slc -n 7.762718 4.533121 m 7.233114 4.354183 l 7.498637 4.266877 l 7.588106 4.002074 l ef -n 7.762718 4.533121 m 7.233114 4.354183 l 7.498637 4.266877 l 7.588106 4.002074 l cp s -0.100000 slw +n 5.292304 5.733121 m 4.762700 5.554181 l 5.028223 5.466876 l 5.117693 5.202074 l ef +n 5.292304 5.733121 m 4.762700 5.554181 l 5.028223 5.466876 l 5.117693 5.202074 l cp s +0.200000 slw [] 0 sd [] 0 sd 0 slc -1.000000 0.000000 0.000000 srgb -n 5.070710 6.980940 m 7.247257 6.986301 l s +n 2.600247 8.180900 m 4.665033 8.186017 l s [] 0 sd 0 slj 0 slc -n 7.622256 6.987225 m 7.121641 7.235992 l 7.247257 6.986301 l 7.122873 6.735994 l ef -n 7.622256 6.987225 m 7.121641 7.235992 l 7.247257 6.986301 l 7.122873 6.735994 l cp s -0.100000 slw +n 5.040031 8.186946 m 4.539413 8.435706 l 4.665033 8.186017 l 4.540652 7.935708 l ef +n 5.040031 8.186946 m 4.539413 8.435706 l 4.665033 8.186017 l 4.540652 7.935708 l cp s +0.200000 slw [] 0 sd [] 0 sd 0 slc -n 5.348959 4.400000 m 7.416489 2.400883 l s +n 2.878497 5.600000 m 4.865695 3.678595 l s [] 0 sd 0 slj 0 slc -n 7.686076 2.140216 m 7.500404 2.667498 l 7.416489 2.400883 l 7.152848 2.308047 l ef -n 7.686076 2.140216 m 7.500404 2.667498 l 7.416489 2.400883 l 7.152848 2.308047 l cp s +n 5.135285 3.417930 m 4.949608 3.945210 l 4.865695 3.678595 l 4.602055 3.585756 l ef +n 5.135285 3.417930 m 4.949608 3.945210 l 4.865695 3.678595 l 4.602055 3.585756 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -0.000000 0.000000 0.000000 srgb -n 7.905600 2.233600 m 11.130797 2.233600 l s +n 5.435137 3.433600 m 8.660334 3.433600 l s [] 0 sd 0 slj 0 slc -n 11.505797 2.233600 m 11.005797 2.483600 l 11.130797 2.233600 l 11.005797 1.983600 l ef -n 11.505797 2.233600 m 11.005797 2.483600 l 11.130797 2.233600 l 11.005797 1.983600 l cp s -0.100000 slw +n 9.035334 3.433600 m 8.535334 3.683600 l 8.660334 3.433600 l 8.535334 3.183600 l ef +n 9.035334 3.433600 m 8.535334 3.683600 l 8.660334 3.433600 l 8.535334 3.183600 l cp s +0.200000 slw [] 0 sd [] 0 sd 0 slc -1.000000 0.000000 0.000000 srgb -n 8.033600 4.601600 m 10.947342 4.546675 l s +n 5.563137 5.801600 m 8.365137 5.748782 l s [] 0 sd 0 slj 0 slc -n 11.322275 4.539607 m 10.827076 4.798986 l 10.947342 4.546675 l 10.817652 4.299075 l ef -n 11.322275 4.539607 m 10.827076 4.798986 l 10.947342 4.546675 l 10.817652 4.299075 l cp s +n 8.740070 5.741714 m 8.244871 6.001093 l 8.365137 5.748782 l 8.235448 5.501182 l ef +n 8.740070 5.741714 m 8.244871 6.001093 l 8.365137 5.748782 l 8.235448 5.501182 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -0.000000 0.000000 0.000000 srgb -n 8.097600 7.033600 m 11.322270 7.058710 l s +n 5.627137 8.233600 m 8.851849 8.258710 l s [] 0 sd 0 slj 0 slc -n 11.697259 7.061629 m 11.195327 7.307729 l 11.322270 7.058710 l 11.199220 6.807744 l ef -n 11.697259 7.061629 m 11.195327 7.307729 l 11.322270 7.058710 l 11.199220 6.807744 l cp s +n 9.226837 8.261629 m 8.724906 8.507729 l 8.851849 8.258710 l 8.728799 8.007744 l ef +n 9.226837 8.261629 m 8.724906 8.507729 l 8.851849 8.258710 l 8.728799 8.007744 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 8.033600 7.033600 m 10.999634 5.125842 l s +n 5.563137 8.233600 m 8.529212 6.325840 l s [] 0 sd 0 slj 0 slc -n 11.315027 4.922981 m 11.029744 5.403724 l 10.999634 5.125842 l 10.759263 4.983201 l ef -n 11.315027 4.922981 m 11.029744 5.403724 l 10.999634 5.125842 l 10.759263 4.983201 l cp s +n 8.844605 6.122981 m 8.559320 6.603722 l 8.529212 6.325840 l 8.288841 6.183197 l ef +n 8.844605 6.122981 m 8.559320 6.603722 l 8.529212 6.325840 l 8.288841 6.183197 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 7.905600 2.553600 m 8.001218 3.987875 l s +n 5.435137 3.753600 m 5.530756 5.187875 l s [] 0 sd 0 slj 0 slc -n 8.026163 4.362044 m 7.743457 3.879781 l 8.001218 3.987875 l 8.242350 3.846522 l ef -n 8.026163 4.362044 m 7.743457 3.879781 l 8.001218 3.987875 l 8.242350 3.846522 l cp s +n 5.555700 5.562044 m 5.272995 5.079781 l 5.530756 5.187875 l 5.771887 5.046522 l ef +n 5.555700 5.562044 m 5.272995 5.079781 l 5.530756 5.187875 l 5.771887 5.046522 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc -n 5.281600 6.777600 m 7.401265 5.038387 l s +n 2.811137 7.977600 m 4.930803 6.238387 l s [] 0 sd 0 slj 0 slc -n 7.691168 4.800519 m 7.463210 5.310945 l 7.401265 5.038387 l 7.146052 4.924409 l ef -n 7.691168 4.800519 m 7.463210 5.310945 l 7.401265 5.038387 l 7.146052 4.924409 l cp s +n 5.220705 6.000519 m 4.992748 6.510945 l 4.930803 6.238387 l 4.675589 6.124409 l ef +n 5.220705 6.000519 m 4.992748 6.510945 l 4.930803 6.238387 l 4.675589 6.124409 l cp s showpage diff --git a/2-dinic/dinic-zpetnahrana.eps b/2-dinic/dinic-zpetnahrana.eps deleted file mode 100644 index 7c34ed3..0000000 --- a/2-dinic/dinic-zpetnahrana.eps +++ /dev/null @@ -1,426 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: Diagram1.dia -%%Creator: Dia v0.94 -%%CreationDate: Sun Mar 26 18:44:33 2006 -%%For: bernard -%%Orientation: Portrait -%%Magnification: 1.0000 -%%BoundingBox: 0 0 539 452 -%%BeginSetup -%%EndSetup -%%EndComments -%%BeginProlog -[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright -/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one -/two /three /four /five /six /seven /eight /nine /colon /semicolon -/less /equal /greater /question /at /A /B /C /D /E -/F /G /H /I /J /K /L /M /N /O -/P /Q /R /S /T /U /V /W /X /Y -/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c -/d /e /f /g /h /i /j /k /l /m -/n /o /p /q /r /s /t /u /v /w -/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright -/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior -/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf -/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla -/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde -/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex -/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring -/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis -/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave -/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def -/cp {closepath} bind def -/c {curveto} bind def -/f {fill} bind def -/a {arc} bind def -/ef {eofill} bind def -/ex {exch} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth pop} bind def -/tr {translate} bind def - -/ellipsedict 8 dict def -ellipsedict /mtrx matrix put -/ellipse -{ ellipsedict begin - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def /savematrix mtrx currentmatrix def - x y tr xrad yrad sc - 0 0 1 startangle endangle arc - savematrix setmatrix - end -} def - -/mergeprocs { -dup length -3 -1 roll -dup -length -dup -5 1 roll -3 -1 roll -add -array cvx -dup -3 -1 roll -0 exch -putinterval -dup -4 2 roll -putinterval -} bind def -/dpi_x 300 def -/dpi_y 300 def -/conicto { - /to_y exch def - /to_x exch def - /conic_cntrl_y exch def - /conic_cntrl_x exch def - currentpoint - /p0_y exch def - /p0_x exch def - /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def - /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def - /p2_x p1_x to_x p0_x sub 1 3 div mul add def - /p2_y p1_y to_y p0_y sub 1 3 div mul add def - p1_x p1_y p2_x p2_y to_x to_y curveto -} bind def -/start_ol { gsave 1.1 dpi_x div dup scale} bind def -/end_ol { closepath fill grestore } bind def -28.346000 -28.346000 scale --5.000000 -16.723001 translate -%%EndProlog - - -1.000000 1.000000 1.000000 srgb -n 9.362500 4.500000 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 9.362500 4.500000 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 12.962500 4.500000 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 12.962500 4.500000 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 16.362500 4.600000 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 16.362500 4.600000 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 20.016500 4.568000 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 20.016500 4.568000 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 5.587500 4.400000 0.462500 0.450000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 5.587500 4.400000 0.462500 0.450000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 23.497500 4.760000 0.450000 0.450000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 23.497500 4.760000 0.450000 0.450000 0 360 ellipse cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 6.050000 4.400000 m 8.875918 4.485311 l s -[] 0 sd -0 slj -0 slc -n 9.250748 4.496626 m 8.743431 4.731425 l 8.875918 4.485311 l 8.758519 4.231653 l ef -n 9.250748 4.496626 m 8.743431 4.731425 l 8.875918 4.485311 l 8.758519 4.231653 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 9.697600 4.601600 m 12.365524 2.397546 l s -[] 0 sd -0 slj -0 slc -n 12.654628 2.158708 m 12.428381 2.669895 l 12.365524 2.397546 l 12.109931 2.284422 l ef -n 12.654628 2.158708 m 12.428381 2.669895 l 12.365524 2.397546 l 12.109931 2.284422 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 12.833600 2.233600 m 16.005083 4.434923 l s -[] 0 sd -0 slj -0 slc -n 16.313146 4.648749 m 15.759844 4.569023 l 16.005083 4.434923 l 16.044946 4.158271 l ef -n 16.313146 4.648749 m 15.759844 4.569023 l 16.005083 4.434923 l 16.044946 4.158271 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 16.673600 4.665600 m 19.706797 4.665600 l s -[] 0 sd -0 slj -0 slc -n 20.081797 4.665600 m 19.581797 4.915600 l 19.706797 4.665600 l 19.581797 4.415600 l ef -n 20.081797 4.665600 m 19.581797 4.915600 l 19.706797 4.665600 l 19.581797 4.415600 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 20.513600 4.729600 m 22.560732 4.754160 l s -[] 0 sd -0 slj -0 slc -n 22.935705 4.758659 m 22.432742 5.002643 l 22.560732 4.754160 l 22.438740 4.502679 l ef -n 22.935705 4.758659 m 22.432742 5.002643 l 22.560732 4.754160 l 22.438740 4.502679 l cp s -gsave 5.000000 6.562500 translate 0.035278 -0.035278 scale -start_ol -5729 6016 moveto -5533 5056 lineto -5124 5280 4670 5392 conicto -4216 5504 3734 5504 conicto -2921 5504 2452 5229 conicto -1984 4954 1984 4482 conicto -1984 3933 3088 3639 conicto -3172 3617 3213 3606 conicto -3548 3506 lineto -4567 3221 4907 2908 conicto -5248 2595 5248 2053 conicto -5248 1059 4456 433 conicto -3665 -192 2384 -192 conicto -1886 -192 1338 -98 conicto -790 -5 130 192 conicto -331 1280 lineto -896 997 1444 850 conicto -1992 704 2496 704 conicto -3263 704 3743 1023 conicto -4224 1343 4224 1833 conicto -4224 2361 2963 2686 conicto -2854 2714 lineto -2496 2802 lineto -1700 3010 1330 3349 conicto -960 3689 960 4217 conicto -960 5221 1716 5810 conicto -2472 6400 3771 6400 conicto -4283 6400 4769 6304 conicto -5256 6208 5729 6016 conicto -end_ol grestore -gsave 23.440000 6.827500 translate 0.035278 -0.035278 scale -start_ol -4867 6272 moveto -4711 5440 lineto -2658 5440 lineto -1992 2036 lineto -1958 1846 1941 1717 conicto -1925 1589 1925 1516 conicto -1925 1157 2140 994 conicto -2356 832 2831 832 conicto -3872 832 lineto -3698 0 lineto -2714 0 lineto -1796 0 1346 353 conicto -896 706 896 1423 conicto -896 1551 912 1702 conicto -929 1854 963 2036 conicto -1628 5440 lineto -752 5440 lineto -918 6272 lineto -1774 6272 lineto -2121 8064 lineto -3150 8064 lineto -2809 6272 lineto -4867 6272 lineto -end_ol grestore -1.000000 1.000000 1.000000 srgb -n 9.362500 12.891001 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 9.362500 12.891001 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 12.962500 12.891001 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 12.962500 12.891001 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 16.362500 12.991001 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 16.362500 12.991001 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 20.080500 13.023001 0.950000 3.650000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 20.080500 13.023001 0.950000 3.650000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 5.587500 12.791001 0.462500 0.450000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 5.587500 12.791001 0.462500 0.450000 0 360 ellipse cp s -1.000000 1.000000 1.000000 srgb -n 23.497500 13.151001 0.450000 0.450000 0 360 ellipse f -0.100000 slw -[] 0 sd -[] 0 sd -0.000000 0.000000 0.000000 srgb -n 23.497500 13.151001 0.450000 0.450000 0 360 ellipse cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 6.050000 12.791001 m 8.875918 12.876311 l s -[] 0 sd -0 slj -0 slc -n 9.250748 12.887627 m 8.743431 13.122426 l 8.875918 12.876311 l 8.758519 12.622653 l ef -n 9.250748 12.887627 m 8.743431 13.122426 l 8.875918 12.876311 l 8.758519 12.622653 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 9.697600 12.992601 m 12.365524 10.788547 l s -[] 0 sd -0 slj -0 slc -n 12.654628 10.549708 m 12.428381 11.060896 l 12.365524 10.788547 l 12.109931 10.675423 l ef -n 12.654628 10.549708 m 12.428381 11.060896 l 12.365524 10.788547 l 12.109931 10.675423 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 16.545600 13.056601 m 19.593719 13.027628 l s -[] 0 sd -0 slj -0 slc -n 19.968702 13.024063 m 19.471100 13.278804 l 19.593719 13.027628 l 19.466348 12.778827 l ef -n 19.968702 13.024063 m 19.471100 13.278804 l 19.593719 13.027628 l 19.466348 12.778827 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -n 20.513600 13.120601 m 22.560732 13.145161 l s -[] 0 sd -0 slj -0 slc -n 22.935705 13.149659 m 22.432742 13.393643 l 22.560732 13.145161 l 22.438740 12.893679 l ef -n 22.935705 13.149659 m 22.432742 13.393643 l 22.560732 13.145161 l 22.438740 12.893679 l cp s -gsave 5.000000 14.953501 translate 0.035278 -0.035278 scale -start_ol -5729 6016 moveto -5533 5056 lineto -5124 5280 4670 5392 conicto -4216 5504 3734 5504 conicto -2921 5504 2452 5229 conicto -1984 4954 1984 4482 conicto -1984 3933 3088 3639 conicto -3172 3617 3213 3606 conicto -3548 3506 lineto -4567 3221 4907 2908 conicto -5248 2595 5248 2053 conicto -5248 1059 4456 433 conicto -3665 -192 2384 -192 conicto -1886 -192 1338 -98 conicto -790 -5 130 192 conicto -331 1280 lineto -896 997 1444 850 conicto -1992 704 2496 704 conicto -3263 704 3743 1023 conicto -4224 1343 4224 1833 conicto -4224 2361 2963 2686 conicto -2854 2714 lineto -2496 2802 lineto -1700 3010 1330 3349 conicto -960 3689 960 4217 conicto -960 5221 1716 5810 conicto -2472 6400 3771 6400 conicto -4283 6400 4769 6304 conicto -5256 6208 5729 6016 conicto -end_ol grestore -gsave 23.440000 15.218501 translate 0.035278 -0.035278 scale -start_ol -4867 6272 moveto -4711 5440 lineto -2658 5440 lineto -1992 2036 lineto -1958 1846 1941 1717 conicto -1925 1589 1925 1516 conicto -1925 1157 2140 994 conicto -2356 832 2831 832 conicto -3872 832 lineto -3698 0 lineto -2714 0 lineto -1796 0 1346 353 conicto -896 706 896 1423 conicto -896 1551 912 1702 conicto -929 1854 963 2036 conicto -1628 5440 lineto -752 5440 lineto -918 6272 lineto -1774 6272 lineto -2121 8064 lineto -3150 8064 lineto -2809 6272 lineto -4867 6272 lineto -end_ol grestore -0.100000 slw -[] 0 sd -[] 0 sd -0 slc -0.975875 0.112764 0.032090 srgb -n 16.163919 9.649882 3.439993 3.439993 87.657866 147.036577 ellipse s -[] 0 sd -0 slj -0 slc -n 13.132801 11.175720 m 13.556586 11.540284 l 13.277703 11.521594 l 13.095421 11.733486 l ef -n 13.132801 11.175720 m 13.556586 11.540284 l 13.277703 11.521594 l 13.095421 11.733486 l cp s -showpage diff --git a/2-dinic/dinic.dia b/2-dinic/dinic.dia index 2e5ec44..95be1c0 100644 Binary files a/2-dinic/dinic.dia and b/2-dinic/dinic.dia differ