<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivan.Volkov&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivan.Volkov&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Ivan.Volkov"/>
		<updated>2026-06-11T14:18:40Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7133</id>
		<title>Лемма об эквивалентности свойства-потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7133"/>
				<updated>2011-01-15T22:25:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|statement= &lt;br /&gt;
Следующие утверждения эквивалентны:&lt;br /&gt;
*Поток &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; {{---}} минимальной стоимости.&lt;br /&gt;
*В остаточной сети &amp;lt;tex&amp;gt; G_f &amp;lt;/tex&amp;gt; нет циклов отрицательного веса.&lt;br /&gt;
|proof= &lt;br /&gt;
*&amp;lt;tex&amp;gt;\Rightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
От противного. Пусть существует &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt; {{---}} цикл отрицательного веса в &amp;lt;tex&amp;gt; G_f &amp;lt;/tex&amp;gt;,&lt;br /&gt;
&amp;lt;tex&amp;gt; c_m &amp;lt;/tex&amp;gt; {{---}} наименьшая остаточная пропускная способность среди рёбер &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пустим по &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt; поток &amp;lt;tex&amp;gt; f_+ = c_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Так как сумма весов по циклу отрицательна и поток по каждому ребру одинаков, то &amp;lt;tex&amp;gt; \sum_{u,v \in V} p(u,v) \cdot f_+(u,v) &amp;lt; 0&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\sum_{u,v \in V} p(u,v) \cdot (f + f_+)(u,v) &amp;lt; \sum_{u,v \in V} p(u,v) \cdot f&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow f &amp;lt;/tex&amp;gt; {{---}} не минимальный. Противоречие.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\Leftarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
От противного. Пусть &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; - не минимальной стоимости. Тогда существует &amp;lt;tex&amp;gt; f_m &amp;lt;/tex&amp;gt; - поток минимальной стоимости и того же объема.&lt;br /&gt;
Существует поток &amp;lt;tex&amp;gt; f_- &amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt; f_m = f + f_m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
По сохранению потока &amp;lt;tex&amp;gt; f_- &amp;lt;/tex&amp;gt; идёт по пути &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; и верно одно из двух утверждений:&lt;br /&gt;
* &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; - из истока в сток.&lt;br /&gt;
* &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; - цикл.&lt;br /&gt;
Если из истока в сток - изменится объем потока, что противрочит условию.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow P - цикл&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f_-(u,v) &amp;lt; 0 \Rightarrow P&amp;lt;/tex&amp;gt; - цикл отрицательного веса. Противоречие. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
* Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. - Алгоритмы. Построение и анализ.&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7131</id>
		<title>Лемма об эквивалентности свойства-потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7131"/>
				<updated>2011-01-15T22:24:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|statement= &lt;br /&gt;
Следующие утверждения эквивалентны:&lt;br /&gt;
*Поток &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; {{---}} минимальной стоимости.&lt;br /&gt;
*В остаточной сети &amp;lt;tex&amp;gt; G_f &amp;lt;/tex&amp;gt; нет циклов отрицательного веса.&lt;br /&gt;
|proof= &lt;br /&gt;
*&amp;lt;tex&amp;gt;\Rightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
От противного. Пусть существует &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt; {{---}} цикл отрицательного веса в &amp;lt;tex&amp;gt; G_f &amp;lt;/tex&amp;gt;,&lt;br /&gt;
&amp;lt;tex&amp;gt; c_m &amp;lt;/tex&amp;gt; {{---}} наименьшая остаточная пропускная способность среди рёбер &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пустим по &amp;lt;tex&amp;gt; C &amp;lt;/tex&amp;gt; поток &amp;lt;tex&amp;gt; f_+ = c_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Так как сумма весов по циклу отрицательна и поток по каждому ребру одинаков, то &amp;lt;tex&amp;gt; \sum_{u,v \in V} p(u,v) \cdot f_+(u,v) &amp;lt; 0&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\sum_{u,v \in V} p(u,v) \cdot (f + f_+)(u,v) &amp;lt; \sum_{u,v \in V} p(u,v) \cdot f&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Rightarrow f &amp;lt;/tex&amp;gt; {{---}} не минимальный. Противоречие.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\Leftarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
От противного. Пусть &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; - не минимальной стоимости. Тогда существует &amp;lt;tex&amp;gt; f_m &amp;lt;/tex&amp;gt; - поток минимальной стоимости и того же объема.&lt;br /&gt;
Существует поток &amp;lt;tex&amp;gt; f_- &amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt; f_m = f + f_m&amp;lt;/tex&amp;gt;.&lt;br /&gt;
По сохранению потока &amp;lt;tex&amp;gt; f_- &amp;lt;/tex&amp;gt; идёт по пути &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; и верно одно из двух утверждений:&lt;br /&gt;
* &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; - из истока в сток.&lt;br /&gt;
* &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt; - цикл.&lt;br /&gt;
Если из истока в сток - изменится объем потока, что противрочит условию.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow P - цикл&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f_-(u,v) &amp;lt; 0 \Rightarrow P&amp;lt;/tex&amp;gt; - цикл отрицательного веса. Противоречие. &lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7119</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7119"/>
				<updated>2011-01-15T22:16:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение задачи ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Дано число &amp;lt;tex&amp;gt;f_0&amp;lt;/tex&amp;gt; и транспортная сеть &amp;lt;tex&amp;gt;\,G(V,E)&amp;lt;/tex&amp;gt; с источником &amp;lt;tex&amp;gt;s \in V&amp;lt;/tex&amp;gt; и стоком &amp;lt;tex&amp;gt;t \in V&amp;lt;/tex&amp;gt;, где ребра &amp;lt;tex&amp;gt;(u,v) \in E&amp;lt;/tex&amp;gt; имеют пропускную способность &amp;lt;tex&amp;gt;\,c(u,v)&amp;lt;/tex&amp;gt;, поток &amp;lt;tex&amp;gt;\,f(u,v)&amp;lt;/tex&amp;gt; и цену &amp;lt;tex&amp;gt;\,p(u,v)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суть задачи — найти поток ''f''(''u'', ''v''):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f(u,v) - min &amp;lt;/tex&amp;gt;.&lt;br /&gt;
:&amp;lt;tex&amp;gt;\sum_{u,v \in V} f(u,v) = f_0&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Релевантные теоремы ==&lt;br /&gt;
*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
*[[Лемма_об_эквивалентности_свойства_потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сети|Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
*Найти любой поток величины &amp;lt;tex&amp;gt;f_0&amp;lt;/tex&amp;gt;, после чего избавиться от всех циклов отрицательной стоимости в остаточном графе. Чтобы избавиться от цикла, надо пустить по нему максимально возможный поток.&lt;br /&gt;
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].&lt;br /&gt;
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].&lt;br /&gt;
&lt;br /&gt;
== Задача о назначениях ==&lt;br /&gt;
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7118</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7118"/>
				<updated>2011-01-15T22:13:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение задачи ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Дано число &amp;lt;math&amp;gt;f_0&amp;lt;/math&amp;gt; и транспортная сеть &amp;lt;math&amp;gt;\,G(V,E)&amp;lt;/math&amp;gt; с источником &amp;lt;math&amp;gt;s \in V&amp;lt;/math&amp;gt; и стоком &amp;lt;math&amp;gt;t \in V&amp;lt;/math&amp;gt;, где ребра &amp;lt;math&amp;gt;(u,v) \in E&amp;lt;/math&amp;gt; имеют пропускную способность &amp;lt;math&amp;gt;\,c(u,v)&amp;lt;/math&amp;gt;, поток &amp;lt;math&amp;gt;\,f(u,v)&amp;lt;/math&amp;gt; и цену &amp;lt;math&amp;gt;\,p(u,v)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суть задачи — найти поток ''f''(''u'', ''v''):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f(u,v) - min &amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} f(u,v) = f_0&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Релевантные теоремы ==&lt;br /&gt;
*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
*[[Лемма_об_эквивалентности_свойства_потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сети|Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
*Найти любой поток величины &amp;lt;math&amp;gt;f_0&amp;lt;/math&amp;gt;, после чего избавиться от всех циклов отрицательной стоимости в остаточном графе. Чтобы избавиться от цикла, надо пустить по нему максимально возможный поток.&lt;br /&gt;
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].&lt;br /&gt;
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].&lt;br /&gt;
&lt;br /&gt;
== Задача о назначениях ==&lt;br /&gt;
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7113</id>
		<title>Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0_%D0%BE%D0%B1_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%B1%D1%8B%D1%82%D1%8C_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%B8_%D0%BE%D1%82%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B8_%D0%BE%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%86%D0%B8%D0%BA%D0%BB%D0%BE%D0%B2_%D0%B2_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=7113"/>
				<updated>2011-01-15T22:10:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети&lt;br /&gt;
|statement=&lt;br /&gt;
Следующие два утверждения эквивалентны:&lt;br /&gt;
* &amp;lt;math&amp;gt; f &amp;lt;/math&amp;gt; - поток минимальной стоимости.&lt;br /&gt;
* В остаточной сети &amp;lt;math&amp;gt; G_f &amp;lt;/math&amp;gt; нет циклов отрицательного веса.&lt;br /&gt;
|proof= &lt;br /&gt;
*&amp;lt;math&amp;gt;\Rightarrow &amp;lt;/math&amp;gt;&lt;br /&gt;
От противного. Пусть существует &amp;lt;math&amp;gt; C &amp;lt;/math&amp;gt; {{---}} цикл отрицательного веса в &amp;lt;math&amp;gt; G_f &amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt; c_m &amp;lt;/math&amp;gt; {{---}} наименьшая остаточная пропускная способность среди рёбер &amp;lt;math&amp;gt; C &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пустим по &amp;lt;math&amp;gt; C &amp;lt;/math&amp;gt; поток &amp;lt;math&amp;gt; f_+ = c_m &amp;lt;/math&amp;gt;. &lt;br /&gt;
Так как сумма весов по циклу отрицательна и поток по каждому ребру одинаков, то &amp;lt;math&amp;gt; \sum_{u,v \in V} p(u,v) \cdot f_+(u,v) &amp;lt; 0&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Rightarrow &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\sum_{u,v \in V} p(u,v) \cdot (f + f_+)(u,v) &amp;lt; \sum_{u,v \in V} p(u,v) \cdot f&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\Rightarrow f &amp;lt;/math&amp;gt; {{---}} не минимальный. Противоречие.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7111</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7111"/>
				<updated>2011-01-15T22:09:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение задачи ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Дано число f_0 и транспортная сеть &amp;lt;math&amp;gt;\,G(V,E)&amp;lt;/math&amp;gt; с источником &amp;lt;math&amp;gt;s \in V&amp;lt;/math&amp;gt; и стоком &amp;lt;math&amp;gt;t \in V&amp;lt;/math&amp;gt;, где ребра &amp;lt;math&amp;gt;(u,v) \in E&amp;lt;/math&amp;gt; имеют пропускную способность &amp;lt;math&amp;gt;\,c(u,v)&amp;lt;/math&amp;gt;, поток &amp;lt;math&amp;gt;\,f(u,v)&amp;lt;/math&amp;gt; и цену &amp;lt;math&amp;gt;\,p(u,v)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суть задачи — найти поток ''f''(''u'', ''v''):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f(u,v) - min &amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} f(u,v) = f_0&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Релевантные теоремы ==&lt;br /&gt;
*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
*[[Лемма_об_эквивалентности_свойства_потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сети|Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
*Найти любой поток величины &amp;lt;math&amp;gt;f_0&amp;lt;/math&amp;gt;, после чего избавиться от всех циклов отрицательной стоимости в остаточном графе. Чтобы избавиться от цикла, надо пустить по нему максимально возможный поток.&lt;br /&gt;
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].&lt;br /&gt;
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].&lt;br /&gt;
&lt;br /&gt;
== Задача о назначениях ==&lt;br /&gt;
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7108</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7108"/>
				<updated>2011-01-15T22:06:39Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение задачи ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Дано число f_0 и транспортная сеть &amp;lt;math&amp;gt;\,G(V,E)&amp;lt;/math&amp;gt; с источником &amp;lt;math&amp;gt;s \in V&amp;lt;/math&amp;gt; и стоком &amp;lt;math&amp;gt;t \in V&amp;lt;/math&amp;gt;, где ребра &amp;lt;math&amp;gt;(u,v) \in E&amp;lt;/math&amp;gt; имеют пропускную способность &amp;lt;math&amp;gt;\,c(u,v)&amp;lt;/math&amp;gt;, поток &amp;lt;math&amp;gt;\,f(u,v)&amp;lt;/math&amp;gt; и цену &amp;lt;math&amp;gt;\,p(u,v)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суть задачи — найти поток ''f''(''u'', ''v''):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f(u,v) - min &amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,Лемма_об_эквивалентности_свойства_потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сетиv \in V} f(u,v) = f_0&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Релевантные теоремы ==&lt;br /&gt;
*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
*[[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
*Найти любой поток величины &amp;lt;math&amp;gt;f_0&amp;lt;/math&amp;gt;, после чего избавиться от всех циклов отрицательной стоимости в остаточном графе. Чтобы избавиться от цикла, надо пустить по нему максимально возможный поток.&lt;br /&gt;
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].&lt;br /&gt;
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].&lt;br /&gt;
&lt;br /&gt;
== Задача о назначениях ==&lt;br /&gt;
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7106</id>
		<title>Поток минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%82%D0%BE%D0%BA_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=7106"/>
				<updated>2011-01-15T22:06:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение задачи ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Дано число f_0 и транспортная сеть &amp;lt;math&amp;gt;\,G(V,E)&amp;lt;/math&amp;gt; с источником &amp;lt;math&amp;gt;s \in V&amp;lt;/math&amp;gt; и стоком &amp;lt;math&amp;gt;t \in V&amp;lt;/math&amp;gt;, где ребра &amp;lt;math&amp;gt;(u,v) \in E&amp;lt;/math&amp;gt; имеют пропускную способность &amp;lt;math&amp;gt;\,c(u,v)&amp;lt;/math&amp;gt;, поток &amp;lt;math&amp;gt;\,f(u,v)&amp;lt;/math&amp;gt; и цену &amp;lt;math&amp;gt;\,p(u,v)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суть задачи — найти поток ''f''(''u'', ''v''):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} p(u,v) \cdot f(u,v) - min &amp;lt;/math&amp;gt;.&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{u,v \in V} f(u,v) = f_0&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Релевантные теоремы ==&lt;br /&gt;
*[[Теорема_Форда-Фалкерсона_о_потоке_минимальной_стоимости|Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
*[[Лемма_об_эквивалентности_свойства-потока_быть_минимальной_стоимости_и_отсутствии_отрицательных_циклов_в_остаточной_сети|Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы решения ==&lt;br /&gt;
*Найти любой поток величины &amp;lt;math&amp;gt;f_0&amp;lt;/math&amp;gt;, после чего избавиться от всех циклов отрицательной стоимости в остаточном графе. Чтобы избавиться от цикла, надо пустить по нему максимально возможный поток.&lt;br /&gt;
*[[Поиск_потока_минимальной_стоимости_методом_дополнения_вдоль_путей_минимальной_стоимости|Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]].&lt;br /&gt;
*[[Использование_потенциалов_Джонсона_при_поиске_потока_минимальной_стоимости|Использование потенциалов Джонсона при поиске потока минимальной стоимости (модификация предыдущего алгоритма)]].&lt;br /&gt;
&lt;br /&gt;
== Задача о назначениях ==&lt;br /&gt;
Популярная задача, которая легко сводится к потоку минимальной стоимости - [[Сведение_задачи_о_назначениях_к_задаче_о_потоке_минимальной_стоимости|задача о назначениях]].&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поток_минимальной_стоимости Википедия]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=7098</id>
		<title>Блокирующий поток</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=7098"/>
				<updated>2011-01-15T22:00:16Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;b&amp;gt;Блокирующий поток&amp;lt;/b&amp;gt; - такой поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; в данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, что любой &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь содержит насыщенное этим потоком ребро. Иными словами, в данной сети не найдётся такого пути из истока в сток, вдоль которого можно беспрепятственно увеличить поток.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Блокпоток.png|thumb|right|Рис. 1]]&lt;br /&gt;
Блокирующий поток не обязательно максимален (пример: см. рис. 1). [[Теорема Форда-Фалкерсона]] говорит о том, что поток будет максимальным тогда и только тогда, когда в остаточной сети не найдётся &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; пути; в блокирующем же потоке ничего не утверждается о существовании пути по рёбрам, появляющимся в остаточной сети.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
[http://www.e-maxx.ru/algo/dinic Алгоритм Диница. Необходимые определения.]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%94%D0%B8%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=7096</id>
		<title>Схема алгоритма Диница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%94%D0%B8%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=7096"/>
				<updated>2011-01-15T21:56:28Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: /* Ассимптотика алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Пусть дана сеть, т.е. ориентированный граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором каждому ребру &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; приписана пропускная способность &amp;lt;tex&amp;gt;c(u,v)&amp;lt;/tex&amp;gt;, а также выделены две вершины — исток &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и сток &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Требуется найти в этой сети поток &amp;lt;tex&amp;gt;f(u,v)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; максимальной величины.&lt;br /&gt;
&lt;br /&gt;
== Используемые определения == &lt;br /&gt;
#[[Дополняющая сеть, дополняющий путь]]&lt;br /&gt;
#[[Блокирующий поток]]&lt;br /&gt;
#Вспомогательная(слоистая) сеть.&lt;br /&gt;
::Для начала определим для каждой вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; длину кратчайшего &amp;lt;tex&amp;gt;s \leadsto v&amp;lt;/tex&amp;gt; пути и обозначим ее &amp;lt;tex&amp;gt;d[v]&amp;lt;/tex&amp;gt; (для этого можно воспользоваться [[Обход в глубину, цвета вершин|обходом в глубину]]). Тогда во вспомогательную сеть включают все те ребра &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; исходной сети, для которых &amp;lt;tex&amp;gt;d[u] + 1 = d[v]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
::Очевидно, полученная сеть ациклична. При этом любой &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь во вспомогательной сети является кратчайшим путём в исходной.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
=== Схема алгоритма ===&lt;br /&gt;
#Для каждого ребра &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; зададим &amp;lt;tex&amp;gt;f(u,v) = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Построим вспомогательную сеть &amp;lt;tex&amp;gt;G_L&amp;lt;/tex&amp;gt; из дополняющей сети &amp;lt;tex&amp;gt;G_f&amp;lt;/tex&amp;gt; данного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;d[t] = \infty&amp;lt;/tex&amp;gt;, остановиться и вывести &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Найдем блокирующий поток &amp;lt;tex&amp;gt;f'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G_L&amp;lt;/tex&amp;gt;. См. [[Алгоритм поиска блокирующего потока в ациклической сети]].&lt;br /&gt;
#Дополним поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; найденным потоком &amp;lt;tex&amp;gt;f'&amp;lt;/tex&amp;gt; и перейдем к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Корректность алгоритма ===&lt;br /&gt;
Покажем, что если алгоритм завершается, то на выходе у него получается поток именно максимальной величины.&lt;br /&gt;
&lt;br /&gt;
В самом деле, предположим, что в какой-то момент во вспомогательной сети, построенной для остаточной сети, не удалось найти блокирующий поток. Это означает, что сток  вообще не достижим во вспомогательной сети из истока . Но поскольку она содержит в себе все кратчайшие пути из истока в остаточной сети, это в свою очередь означает, что в остаточной сети нет пути из истока в сток. Следовательно, применяя [[Теорема Форда-Фалкерсона|теорему Форда-Фалкерсона]], получаем, что текущий поток в самом деле максимален.&lt;br /&gt;
&lt;br /&gt;
=== Ассимптотика алгоритма ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Расстояние между истоком и стоком строго увеличивается после каждой фазы алгоритма, т.е &amp;lt;tex&amp;gt;d'[t] &amp;gt; d[t]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d'[t]&amp;lt;/tex&amp;gt; - значение, полученное на следующей фазе алгоритма.&lt;br /&gt;
|proof=&lt;br /&gt;
От противного. Рассмотрим кратчайший путь из истока в сток; по предположению, его длина должна сохраниться неизменной. Однако остаточная сеть на следующей фазе содержит только рёбра остаточной сети перед выполнением текущей фазы, либо обратные к ним. Таким образом, пришли к противоречию: нашёлся &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь, который не содержит насыщенных рёбер, и имеет ту же длину, что и кратчайший путь. Этот путь должен был быть &amp;quot;заблокирован&amp;quot; блокирующим потоком, чего не произошло, в чём и заключается противоречие, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
Поскольку длина кратчайшего &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; пути не может превосходить &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;, то, следовательно, алгоритм Диница совершает не более &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; фазы.&lt;br /&gt;
Таким образом, в зависимости от того, каким алгоритмом нахождения блокирующего потока мы пользовались, весь алгоритм Диница может выполняться за &amp;lt;tex&amp;gt;O(VE^2)&amp;lt;/tex&amp;gt; или за &amp;lt;tex&amp;gt;O(V^2E)&amp;lt;/tex&amp;gt;. Также возможно достичь ассимптотики &amp;lt;tex&amp;gt;O(VE\log V)&amp;lt;/tex&amp;gt;, если использовать динамические деревья Слетора и Тарьяна.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://www.e-maxx.ru/algo/dinic Алгоритм Диница на e-maxx.ru]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Алгоритм_Диница Алгоритм Диница на ru.wikipedia.org]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=7093</id>
		<title>Блокирующий поток</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=7093"/>
				<updated>2011-01-15T21:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;b&amp;gt;Блокирующий поток&amp;lt;/b&amp;gt; - такой поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; в данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, что любой &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь содержит насыщенное этим потоком ребро. Иными словами, в данной сети не найдётся такого пути из истока в сток, вдоль которого можно беспрепятственно увеличить поток.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:Блокпоток.png|thumb|right|Рис. 1]]&lt;br /&gt;
Блокирующий поток не обязательно максимален (см. рис. 1). [[Теорема Форда-Фалкерсона]] говорит о том, что поток будет максимальным тогда и только тогда, когда в остаточной сети не найдётся &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; пути; в блокирующем же потоке ничего не утверждается о существовании пути по рёбрам, появляющимся в остаточной сети.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
[http://www.e-maxx.ru/algo/dinic Алгоритм Диница. Необходимые определения.]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA%D0%BF%D0%BE%D1%82%D0%BE%D0%BA.png&amp;diff=7084</id>
		<title>Файл:Блокпоток.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA%D0%BF%D0%BE%D1%82%D0%BE%D0%BA.png&amp;diff=7084"/>
				<updated>2011-01-15T21:46:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: Блокирующий поток, не являющийся максимальным.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Блокирующий поток, не являющийся максимальным.&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%85%D0%BE%D0%B4_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83,_%D1%86%D0%B2%D0%B5%D1%82%D0%B0_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD&amp;diff=6944</id>
		<title>Обход в глубину, цвета вершин</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%85%D0%BE%D0%B4_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83,_%D1%86%D0%B2%D0%B5%D1%82%D0%B0_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD&amp;diff=6944"/>
				<updated>2011-01-15T19:27:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Обход в глубину''' (поиск в глубину, англ. Depth-First Search, DFS) - один из основных методов обхода графа, часто используемый для [[Использование обхода в глубину для проверки связности|проверки связности]], поиска [[Использование обхода в глубину для поиска цикла в ориентированном графе|цикла]] и [[Использование обхода в глубину для поиска компонент сильной связности|компонент сильной связности]] и для [[Использование обхода в глубину для топологической сортировки|топологической сортировки]].&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
=== Общая идея ===&lt;br /&gt;
Общая идея алгоритма состоит в следующем:  для каждой ''не пройденной'' вершины необходимо найти все ''не пройденные'' смежные вершины и повторить поиск для них.&lt;br /&gt;
&lt;br /&gt;
=== Пошаговое представление ===&lt;br /&gt;
#Выбираем  любую вершину из еще ''не пройденных'', обозначим ее как u.&lt;br /&gt;
#Запускаем процедуру DFS(u)&lt;br /&gt;
#*Помечаем вершину u как ''пройденную''&lt;br /&gt;
#*Для каждой ''не пройденной'' смежной с u вершиной (назовем ее v) запускаем DFS(v)&lt;br /&gt;
#Повторяем шаги 1 и 2, пока все вершины не окажутся ''пройденными''.  &lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
 vector&amp;lt;bool&amp;gt; visited;                       //вектор для хранения информации о ''пройденных'' и ''не пройденных'' вершинах&lt;br /&gt;
 &lt;br /&gt;
 void dfs(int u)              &lt;br /&gt;
 {&lt;br /&gt;
     visited[u] = true;                      //помечаем вершину как пройденную&lt;br /&gt;
     for (v таких, что (u, v) - ребро в G)   //проходим по смежным с u вершинам&lt;br /&gt;
         if (!visited[v])                    //проверяем, не находились ли мы ранее в выбранной вершине&lt;br /&gt;
             dfs(v);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ...                                     //задание графа G с количеством вершин n.&lt;br /&gt;
     visited.assign(n, false);               //в начале все вершины в графе ''не пройденные''&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; ++i)             //проходим по всем вершинам графа...&lt;br /&gt;
         if (!visited[i])                    //...не забыв проверить, были мы уже в очередной вершине или нет&lt;br /&gt;
             dfs(i);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Цвета вершин ==&lt;br /&gt;
Зачастую, простой информации &amp;quot;были/не были в вершине&amp;quot; не хватает для конкретных целей.&amp;lt;br /&amp;gt; &lt;br /&gt;
Поэтому в процессе алгоритма вершинам задают некоторые цвета:&amp;lt;br /&amp;gt;&lt;br /&gt;
:если вершина ''белая'', значит, мы в ней еще не были, вершина ''не пройдена'';&amp;lt;br /&amp;gt;&lt;br /&gt;
:''серая'' - вершина ''проходится'' в текущей процедуре DFS;&amp;lt;br /&amp;gt;&lt;br /&gt;
:''черная'' - вершина ''пройдена'', все итерации DFS от нее завершены.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такие &amp;quot;метки&amp;quot; в основном используются при [[Использование обхода в глубину для поиска цикла в ориентированном графе|поиске цикла]].&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Отличие реализации с цветами от предыдущей лишь в массиве visited, который мы назовем теперь color, и дополнительной ''черной'' &amp;quot;метки&amp;quot;. При этом цвета вершин будут заданы следующим образом: ''белый'' - 0, ''серый'' - 1, ''черный'' - 2. Все отличия помечены '''жирным''' шрифтом.&lt;br /&gt;
&lt;br /&gt;
 vector&amp;lt;'''int'''&amp;gt; '''color''';                          //вектор для хранения информации '''о цвете''' вершин&lt;br /&gt;
 &lt;br /&gt;
 void dfs(int u)              &lt;br /&gt;
 {&lt;br /&gt;
     '''color[u] = 1;                           //раскрашиваем вершину в ''серый'' цвет'''&lt;br /&gt;
     for (v таких, что (u, v) - ребро в G)   //проходим по смежным с u вершинам&lt;br /&gt;
         if (!color[v])                      //проверяем, не находились ли мы ранее в выбранной вершине, '''условие не требует изменений,''' &lt;br /&gt;
             dfs(v);                         '''//поскольку мы считаем вершину &amp;quot;не пройденной&amp;quot; только тогда, когда она ''белого'' цвета, т.е. когда color[v] = 0'''&lt;br /&gt;
     '''color[u] = 2;                           //раскрашиваем вершину в ''черный'' цвет'''&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ...                                     //задание графа G с количеством вершин n.&lt;br /&gt;
     '''color.assign(n, 0);'''                     //в начале все вершины в графе ''не пройденные'', '''т.е. ''белые''.'''&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; ++i)             //проходим по всем вершинам графа...&lt;br /&gt;
         if (!visited[i])                    //...не забыв проверить, были мы уже в очередной вершине или нет&lt;br /&gt;
             dfs(i);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Поиск_в_глубину Обход в глубину на ru.wikipedia.org]&lt;br /&gt;
*[http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Обход в глубину]]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%94%D0%B8%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=6933</id>
		<title>Схема алгоритма Диница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%94%D0%B8%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=6933"/>
				<updated>2011-01-15T19:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: Новая страница: «== Постановка задачи == Пусть дана сеть, т.е. ориентированный граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором каждому …»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Пусть дана сеть, т.е. ориентированный граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором каждому ребру &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; приписана пропускная способность &amp;lt;tex&amp;gt;c(u,v)&amp;lt;/tex&amp;gt;, а также выделены две вершины — исток &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и сток &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Требуется найти в этой сети поток &amp;lt;tex&amp;gt;f(u,v)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; максимальной величины.&lt;br /&gt;
&lt;br /&gt;
== Используемые определения == &lt;br /&gt;
#[[Дополняющая сеть, дополняющий путь]]&lt;br /&gt;
#[[Блокирующий поток]]&lt;br /&gt;
#Вспомогательная(слоистая) сеть.&lt;br /&gt;
::Для начала определим для каждой вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; длину кратчайшего &amp;lt;tex&amp;gt;s \leadsto v&amp;lt;/tex&amp;gt; пути и обозначим ее &amp;lt;tex&amp;gt;d[v]&amp;lt;/tex&amp;gt; (для этого можно воспользоваться [[Обход в глубину, цвета вершин|обходом в глубину]]). Тогда во вспомогательную сеть включают все те ребра &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; исходной сети, для которых &amp;lt;tex&amp;gt;d[u] + 1 = d[v]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
::Очевидно, полученная сеть ациклична. При этом любой &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь во вспомогательной сети является кратчайшим путём в исходной.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
=== Схема алгоритма ===&lt;br /&gt;
#Для каждого ребра &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; зададим &amp;lt;tex&amp;gt;f(u,v) = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Построим вспомогательную сеть &amp;lt;tex&amp;gt;G_L&amp;lt;/tex&amp;gt; из дополняющей сети &amp;lt;tex&amp;gt;G_f&amp;lt;/tex&amp;gt; данного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;d[t] = \infty&amp;lt;/tex&amp;gt;, остановиться и вывести &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Найдем блокирующий поток &amp;lt;tex&amp;gt;f'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G_L&amp;lt;/tex&amp;gt;. См. [[Алгоритм поиска блокирующего потока в ациклической сети]].&lt;br /&gt;
#Дополним поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; найденным потоком &amp;lt;tex&amp;gt;f'&amp;lt;/tex&amp;gt; и перейдем к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Корректность алгоритма ===&lt;br /&gt;
Покажем, что если алгоритм завершается, то на выходе у него получается поток именно максимальной величины.&lt;br /&gt;
&lt;br /&gt;
В самом деле, предположим, что в какой-то момент во вспомогательной сети, построенной для остаточной сети, не удалось найти блокирующий поток. Это означает, что сток  вообще не достижим во вспомогательной сети из истока . Но поскольку она содержит в себе все кратчайшие пути из истока в остаточной сети, это в свою очередь означает, что в остаточной сети нет пути из истока в сток. Следовательно, применяя [[Теорема Форда-Фалкерсона|теорему Форда-Фалкерсона]], получаем, что текущий поток в самом деле максимален.&lt;br /&gt;
&lt;br /&gt;
=== Ассимптотика алгоритма ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
Расстояние между истоком и стоком строго увеличивается после каждой фазы алгоритма, т.е &amp;lt;tex&amp;gt;d'[t] &amp;gt; d[t]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;d'[t]&amp;lt;/tex&amp;gt; - значение, полученное на следующей фазе алгоритма.&lt;br /&gt;
|proof=&lt;br /&gt;
От противного. Рассмотрим кратчайший путь из истока в сток; по предположению, его длина должна сохраниться неизменной. Однако остаточная сеть на следующей фазе содержит только рёбра остаточной сети перед выполнением текущей фазы, либо обратные к ним. Таким образом, пришли к противоречию: нашёлся &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь, который не содержит насыщенных рёбер, и имеет ту же длину, что и кратчайший путь. Этот путь должен был быть &amp;quot;заблокирован&amp;quot; блокирующим потоком, чего не произошло, в чём и заключается противоречие, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
Поскольку длина кратчайшего &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; пути не может превосходить &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;, то, следовательно, алгоритм Диница совершает не более &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; фазы.&lt;br /&gt;
Таким образом, в зависимости от того, каким алгоритмом нахождения блокирующего потока мы пользовались, весь алгоритм Диница может выполняться за &amp;lt;tex&amp;gt;O(VE^2)&amp;lt;/tex&amp;gt; или за &amp;lt;tex&amp;gt;O(V^2E)&amp;lt;/tex&amp;gt;. Также возможно достичь ассимптотики &amp;lt;tex&amp;gt;O(VElogV)&amp;lt;/tex&amp;gt;, если использовать динамические деревья Слетора и Тарьяна.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
*[http://www.e-maxx.ru/algo/dinic Алгоритм Диница на e-maxx.ru]&lt;br /&gt;
*[http://ru.wikipedia.org/wiki/Алгоритм_Диница Алгоритм Диница на ru.wikipedia.org]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=6862</id>
		<title>Блокирующий поток</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA&amp;diff=6862"/>
				<updated>2011-01-15T18:00:22Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: Новая страница: «{{Определение |definition= &amp;lt;b&amp;gt;Блокирующий поток&amp;lt;/b&amp;gt; - такой поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; в данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, что л…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;b&amp;gt;Блокирующий поток&amp;lt;/b&amp;gt; - такой поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; в данной сети &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, что любой &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; путь содержит насыщенное этим потоком ребро. Иными словами, в данной сети не найдётся такого пути из истока в сток, вдоль которого можно беспрепятственно увеличить поток.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Блокирующий поток не обязательно максимален. [[Теорема Форда-Фалкерсона]] говорит о том, что поток будет максимальным тогда и только тогда, когда в остаточной сети не найдётся &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; пути; в блокирующем же потоке ничего не утверждается о существовании пути по рёбрам, появляющимся в остаточной сети.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
[http://www.e-maxx.ru/algo/dinic Алгоритм Диница. Необходимые определения.]&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%85%D0%BE%D0%B4_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83,_%D1%86%D0%B2%D0%B5%D1%82%D0%B0_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD&amp;diff=4759</id>
		<title>Обход в глубину, цвета вершин</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%85%D0%BE%D0%B4_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83,_%D1%86%D0%B2%D0%B5%D1%82%D0%B0_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD&amp;diff=4759"/>
				<updated>2010-11-10T13:44:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ivan.Volkov: Новая страница: «'''Обход в глубину''' (поиск в глубину, англ. Depth-First Search, DFS) - один из основных методов обхода г…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Обход в глубину''' (поиск в глубину, англ. Depth-First Search, DFS) - один из основных методов обхода графа, часто используемый для [[Использование обхода в глубину для проверки связности|проверки связности]], поиска [[Использование обхода в глубину для поиска цикла в ориентированном графе|цикла]] и [[Использование обхода в глубину для поиска компонент сильной связности|компонент сильной связности]] и для [[Использование обхода в глубину для топологической сортировки|топологической сортировки]].&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
=== Общая идея ===&lt;br /&gt;
Общая идея алгоритма состоит в следующем:  для каждой ''не пройденной'' вершины необходимо найти все ''не пройденные'' смежные вершины и повторить поиск для них.&lt;br /&gt;
&lt;br /&gt;
=== Пошаговое представление ===&lt;br /&gt;
#Выбираем  любую вершину из еще ''не пройденных'', обозначим ее как u.&lt;br /&gt;
#Запускаем процедуру DFS(u)&lt;br /&gt;
#*Помечаем вершину u как ''пройденную''&lt;br /&gt;
#*Для каждой ''не пройденной'' смежной с u вершиной (назовем ее v) запускаем DFS(v)&lt;br /&gt;
#Повторяем шаги 1 и 2, пока все вершины не окажутся ''пройденными''.  &lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
 vector&amp;lt;bool&amp;gt; visited;                       //вектор для хранения информации о ''пройденных'' и ''не пройденных'' вершинах&lt;br /&gt;
 &lt;br /&gt;
 void dfs(int u)              &lt;br /&gt;
 {&lt;br /&gt;
     visited[u] = true;                      //помечаем вершину как пройденную&lt;br /&gt;
     for (v таких, что (u, v) - ребро в G)   //проходим по смежным с u вершинам&lt;br /&gt;
         if (!visited[v])                    //проверяем, не находились ли мы ранее в выбранной вершине&lt;br /&gt;
             dfs(v);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ...                                     //задание графа G с количеством вершин n.&lt;br /&gt;
     visited.assign(n, false);               //в начале все вершины в графе ''не пройденные''&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; ++i)             //проходим по всем вершинам графа...&lt;br /&gt;
         if (!visited[i])                    //...не забыв проверить, были мы уже в очередной вершине или нет&lt;br /&gt;
             dfs(i);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Цвета вершин ==&lt;br /&gt;
Зачастую, простой информации &amp;quot;были/не были в вершине&amp;quot; не хватает для конкретных целей.&amp;lt;br /&amp;gt; &lt;br /&gt;
Поэтому в процессе алгоритма вершинам задают некоторые цвета:&amp;lt;br /&amp;gt;&lt;br /&gt;
:если вершина ''белая'', значит, мы в ней еще не были, вершина ''не пройдена'';&amp;lt;br /&amp;gt;&lt;br /&gt;
:''серая'' - вершина ''проходится'' в текущей процедуре DFS;&amp;lt;br /&amp;gt;&lt;br /&gt;
:''черная'' - вершина ''пройдена'', все итерации DFS от нее завершены.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такие &amp;quot;метки&amp;quot; в основном используются при [[Использование обхода в глубину для поиска цикла в ориентированном графе|поиске цикла]].&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
Отличие реализации с цветами от предыдущей лишь в массиве visited, который мы назовем теперь color, и дополнительной ''черной'' &amp;quot;метки&amp;quot;. При этом цвета вершин будут заданы следующим образом: ''белый'' - 0, ''серый'' - 1, ''черный'' - 2. Все отличия помечены '''жирным''' шрифтом.&lt;br /&gt;
&lt;br /&gt;
 vector&amp;lt;'''int'''&amp;gt; '''color''';                          //вектор для хранения информации '''о цвете''' вершин&lt;br /&gt;
 &lt;br /&gt;
 void dfs(int u)              &lt;br /&gt;
 {&lt;br /&gt;
     '''color[u] = 1;                           //раскрашиваем вершину в ''серый'' цвет'''&lt;br /&gt;
     for (v таких, что (u, v) - ребро в G)   //проходим по смежным с u вершинам&lt;br /&gt;
         if (!color[v])                      //проверяем, не находились ли мы ранее в выбранной вершине, '''условие не требует изменений,''' &lt;br /&gt;
             dfs(v);                         '''//поскольку мы считаем вершину &amp;quot;не пройденной&amp;quot; только тогда, когда она ''белого'' цвета, т.е. когда color[v] = 0'''&lt;br /&gt;
     '''color[u] = 2;                           //раскрашиваем вершину в ''черный'' цвет'''&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     ...                                     //задание графа G с количеством вершин n.&lt;br /&gt;
     '''color.assign(n, 0);'''                     //в начале все вершины в графе ''не пройденные'', '''т.е. ''белые''.'''&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; ++i)             //проходим по всем вершинам графа...&lt;br /&gt;
         if (!visited[i])                    //...не забыв проверить, были мы уже в очередной вершине или нет&lt;br /&gt;
             dfs(i);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Ivan.Volkov</name></author>	</entry>

	</feed>