|
@@ -1,6 +1,6 @@
|
|
-<!DOCTYPE html>
|
|
|
|
-<html lang="en">
|
|
|
|
-<head>
|
|
|
|
|
|
+<!DOCTYPE html>
|
|
|
|
+<html lang="en">
|
|
|
|
+<head>
|
|
<meta charset="UTF-8">
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
|
<meta name="theme-color" content="#222">
|
|
<meta name="theme-color" content="#222">
|
|
@@ -21,45 +21,44 @@
|
|
var NexT = window.NexT || {};
|
|
var NexT = window.NexT || {};
|
|
var CONFIG = {"hostname":"yoursite.com","root":"/","scheme":"Muse","version":"7.7.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":true,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideLeftIn"}}};
|
|
var CONFIG = {"hostname":"yoursite.com","root":"/","scheme":"Muse","version":"7.7.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":true,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":true},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideLeftIn"}}};
|
|
</script>
|
|
</script>
|
|
-
|
|
|
|
- <meta name="description" content="前置知识
存图方式(邻接表,邻接矩阵),图的遍历(dfs,bfs)
引入
我们举个例子吧: 有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。 点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在单位时间内在起点终点之间最多能流多少水。">
|
|
|
|
|
|
+
|
|
|
|
+ <meta name="description" content="前置知识 存图方式(邻接表,邻接矩阵),图的遍历(dfs,bfs) 引入 我们举个例子吧: 有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。 点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在单位时间内在起点终点之间最多能流多少水。">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:title" content="网络最大流-Dinic">
|
|
<meta property="og:title" content="网络最大流-Dinic">
|
|
<meta property="og:url" content="http://yoursite.com/2020/03/02/dinic/index.html">
|
|
<meta property="og:url" content="http://yoursite.com/2020/03/02/dinic/index.html">
|
|
<meta property="og:site_name" content="Schtonn's Blog">
|
|
<meta property="og:site_name" content="Schtonn's Blog">
|
|
-<meta property="og:description" content="前置知识
存图方式(邻接表,邻接矩阵),图的遍历(dfs,bfs)
引入
我们举个例子吧: 有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。 点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在单位时间内在起点终点之间最多能流多少水。">
|
|
|
|
|
|
+<meta property="og:description" content="前置知识 存图方式(邻接表,邻接矩阵),图的遍历(dfs,bfs) 引入 我们举个例子吧: 有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。 点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在单位时间内在起点终点之间最多能流多少水。">
|
|
<meta property="og:locale" content="en_US">
|
|
<meta property="og:locale" content="en_US">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111114148208.png">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111114148208.png">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
-<meta property="og:image" content="file://C:/Users/liangliang/Documents/Gridea/post-images/1582894458914.png">
|
|
|
|
<meta property="article:published_time" content="2020-03-02T03:31:22.000Z">
|
|
<meta property="article:published_time" content="2020-03-02T03:31:22.000Z">
|
|
<meta property="article:modified_time" content="2020-03-03T12:41:19.240Z">
|
|
<meta property="article:modified_time" content="2020-03-03T12:41:19.240Z">
|
|
<meta property="article:author" content="Schtonn">
|
|
<meta property="article:author" content="Schtonn">
|
|
<meta property="article:tag" content="graph">
|
|
<meta property="article:tag" content="graph">
|
|
<meta name="twitter:card" content="summary">
|
|
<meta name="twitter:card" content="summary">
|
|
-<meta name="twitter:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
|
|
-
|
|
|
|
-<link rel="canonical" href="http://yoursite.com/2020/03/02/dinic/">
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-<script id="page-configurations">
|
|
|
|
- // https://hexo.io/docs/variables.html
|
|
|
|
- CONFIG.page = {
|
|
|
|
- sidebar: "",
|
|
|
|
- isHome : false,
|
|
|
|
- isPost : true
|
|
|
|
- };
|
|
|
|
-</script>
|
|
|
|
-
|
|
|
|
- <title>网络最大流-Dinic | Schtonn's Blog</title>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+<meta name="twitter:image" content="https://img-blog.csdnimg.cn/20200111112801923.png">
|
|
|
|
+
|
|
|
|
+<link rel="canonical" href="http://yoursite.com/2020/03/02/dinic/">
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+<script id="page-configurations">
|
|
|
|
+ // https://hexo.io/docs/variables.html
|
|
|
|
+ CONFIG.page = {
|
|
|
|
+ sidebar: "",
|
|
|
|
+ isHome : false,
|
|
|
|
+ isPost : true
|
|
|
|
+ };
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+ <title>网络最大流-Dinic | Schtonn's Blog</title>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
<noscript>
|
|
<noscript>
|
|
<style>
|
|
<style>
|
|
.use-motion .brand,
|
|
.use-motion .brand,
|
|
@@ -82,14 +81,14 @@
|
|
.use-motion .logo-line-after i { right: initial; }
|
|
.use-motion .logo-line-after i { right: initial; }
|
|
</style>
|
|
</style>
|
|
</noscript>
|
|
</noscript>
|
|
-
|
|
|
|
-</head>
|
|
|
|
-
|
|
|
|
-<body itemscope itemtype="http://schema.org/WebPage">
|
|
|
|
- <div class="container use-motion">
|
|
|
|
- <div class="headband"></div>
|
|
|
|
-
|
|
|
|
- <header class="header" itemscope itemtype="http://schema.org/WPHeader">
|
|
|
|
|
|
+
|
|
|
|
+</head>
|
|
|
|
+
|
|
|
|
+<body itemscope itemtype="http://schema.org/WebPage">
|
|
|
|
+ <div class="container use-motion">
|
|
|
|
+ <div class="headband"></div>
|
|
|
|
+
|
|
|
|
+ <header class="header" itemscope itemtype="http://schema.org/WPHeader">
|
|
<div class="header-inner"><div class="site-brand-container">
|
|
<div class="header-inner"><div class="site-brand-container">
|
|
<div class="site-nav-toggle">
|
|
<div class="site-nav-toggle">
|
|
<div class="toggle" aria-label="Toggle navigation bar">
|
|
<div class="toggle" aria-label="Toggle navigation bar">
|
|
@@ -116,46 +115,46 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
-
|
|
|
|
-<nav class="site-nav">
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+<nav class="site-nav">
|
|
|
|
|
|
<ul id="menu" class="menu">
|
|
<ul id="menu" class="menu">
|
|
- <li class="menu-item menu-item-home">
|
|
|
|
-
|
|
|
|
- <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
|
|
|
-
|
|
|
|
|
|
+ <li class="menu-item menu-item-home">
|
|
|
|
+
|
|
|
|
+ <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
|
|
|
+
|
|
</li>
|
|
</li>
|
|
- <li class="menu-item menu-item-tags">
|
|
|
|
-
|
|
|
|
- <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>Tags</a>
|
|
|
|
-
|
|
|
|
|
|
+ <li class="menu-item menu-item-tags">
|
|
|
|
+
|
|
|
|
+ <a href="/tags/" rel="section"><i class="fa fa-fw fa-tags"></i>Tags</a>
|
|
|
|
+
|
|
</li>
|
|
</li>
|
|
- <li class="menu-item menu-item-archives">
|
|
|
|
-
|
|
|
|
- <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
|
|
|
-
|
|
|
|
|
|
+ <li class="menu-item menu-item-archives">
|
|
|
|
+
|
|
|
|
+ <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
|
|
|
+
|
|
</li>
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
-
|
|
|
|
-</nav>
|
|
|
|
-</div>
|
|
|
|
- </header>
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+</nav>
|
|
|
|
+</div>
|
|
|
|
+ </header>
|
|
|
|
+
|
|
|
|
|
|
<div class="back-to-top">
|
|
<div class="back-to-top">
|
|
<i class="fa fa-arrow-up"></i>
|
|
<i class="fa fa-arrow-up"></i>
|
|
<span>0%</span>
|
|
<span>0%</span>
|
|
</div>
|
|
</div>
|
|
<div class="reading-progress-bar"></div>
|
|
<div class="reading-progress-bar"></div>
|
|
-
|
|
|
|
-
|
|
|
|
- <main class="main">
|
|
|
|
- <div class="main-inner">
|
|
|
|
- <div class="content-wrap">
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- <div class="content">
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <main class="main">
|
|
|
|
+ <div class="main-inner">
|
|
|
|
+ <div class="content-wrap">
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <div class="content">
|
|
|
|
|
|
|
|
|
|
<div class="posts-expand">
|
|
<div class="posts-expand">
|
|
@@ -209,29 +208,52 @@
|
|
<div class="post-body" itemprop="articleBody">
|
|
<div class="post-body" itemprop="articleBody">
|
|
|
|
|
|
|
|
|
|
- <h3 id="前置知识">前置知识</h3>
|
|
|
|
-<p>存图方式(<a href="http://baidu.physton.com/?q=邻接表" target="_blank" rel="noopener" title="简单">邻接表</a>,<a href="http://baidu.physton.com/?q=邻接矩阵" target="_blank" rel="noopener" title="都太简单了">邻接矩阵</a>),图的遍历(<a href="http://baidu.physton.com/?q=dfs" target="_blank" rel="noopener" title="简单">dfs</a>,<a href="http://baidu.physton.com/?q=bfs" target="_blank" rel="noopener" title="简单">bfs</a>)</p>
|
|
|
|
-<h3 id="引入">引入</h3>
|
|
|
|
-<p>我们举个例子吧: 有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。 点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在<strong>单位时间内</strong>在起点终点之间最多能流多少水。 <a id="more"></a></p>
|
|
|
|
-<h3 id="概念">概念</h3>
|
|
|
|
-<ul>
|
|
|
|
-<li>源点:顾名思义,起点,一般用s表示</li>
|
|
|
|
-<li>汇点:顾名思义,终点,一般用t表示。。。</li>
|
|
|
|
-<li>容量:顾名思义。。。一条边单位时间内的的容量</li>
|
|
|
|
-<li>残余网络:进行增广后剩余的网络</li>
|
|
|
|
-<li>増广: > 増广就是在残余网络中寻找从源点到汇点的可行路径(増广路),并将该路径上的所有边的容量减去路径中的最小容量,形成新的残余网络,<strong>人话就是找一条能走的路,然后把路走掉。</strong> 例如: <img src="https://img-blog.csdnimg.cn/20200111112801923.png" alt="在这里插入图片描述" /> 如果当前有这样一个残余网络,那么<span class="math inline">\(s\rightarrow4\rightarrow1\rightarrow t\)</span>就是一条増广路,最小容量是4,进行増广过后就形成了这样一张图: <img src="https://img-blog.csdnimg.cn/20200111114148208.png" alt="在这里插入图片描述" /> 如何寻找増广路?直接dfs即可。</li>
|
|
|
|
-<li>反向边: > 有时候,程序増广的时候会出现爆炸性错误,例如还是那个图: <img src="https://img-blog.csdnimg.cn/20200111112801923.png" alt="在这里插入图片描述" /> 有两条増广路,万一程序选错了怎么办? 这时就要请出反向边了。 每次増广的时候,<strong>在残余网络上逆着増广路径建容量与増广路径最小容量相等的反向边</strong>,比如刚才那张图,就顺着<span class="math inline">\(t\rightarrow1\rightarrow4\rightarrow s\)</span>建容量为4的边。相当于把原来的那条路抵消掉了,如果増广时走过了反向边,就相当于把原来的増广撤回去了。 这就给了程序一个反悔的机会。</li>
|
|
|
|
-</ul>
|
|
|
|
-<h3 id="朴素算法">朴素算法</h3>
|
|
|
|
-<ol type="1">
|
|
|
|
-<li>増广</li>
|
|
|
|
-<li>沿着増广路径建反向边</li>
|
|
|
|
-<li>如果源点与汇点依然连通,回到1</li>
|
|
|
|
-</ol>
|
|
|
|
-<h3 id="dinic优化">Dinic优化</h3>
|
|
|
|
-<p>Dinic的优化就是用bfs建立了由s开始的一个分层图,每次寻找増广路时必须让边上的层数严格递增,就可以确保每一步都离汇点近了一些这样就不会陷入毒瘤数据卡成的死循环,比如这样的著名毒瘤数据: <img src="file://C:/Users/liangliang/Documents/Gridea/post-images/1582894458914.png" />在这个数据中,如果用朴素算法,就会让中间容量为1的边上下抖动抽搐,等到他抽了999次的时候才把上面和下面的999减没。如果用Dinic,两次直接求出999+999。</p>
|
|
|
|
-<h3 id="代码">代码</h3>
|
|
|
|
-<p><a href="https://schtonn.github.io/404.html" target="_blank" rel="noopener"><code>404 Not Found(Click for more information)</code></a> 完结!</p>
|
|
|
|
|
|
+ <h3 id="前置知识"><a class="markdownIt-Anchor" href="#前置知识"></a> 前置知识</h3>
|
|
|
|
+<p>存图方式(<a href="http://baidu.physton.com/?q=%E9%82%BB%E6%8E%A5%E8%A1%A8" target="_blank" rel="noopener" title="简单">邻接表</a>,<a href="http://baidu.physton.com/?q=%E9%82%BB%E6%8E%A5%E7%9F%A9%E9%98%B5" target="_blank" rel="noopener" title="都太简单了">邻接矩阵</a>),图的遍历(<a href="http://baidu.physton.com/?q=dfs" target="_blank" rel="noopener" title="简单">dfs</a>,<a href="http://baidu.physton.com/?q=bfs" target="_blank" rel="noopener" title="简单">bfs</a>)</p>
|
|
|
|
+<h3 id="引入"><a class="markdownIt-Anchor" href="#引入"></a> 引入</h3>
|
|
|
|
+<p>我们举个例子吧:<br />
|
|
|
|
+有一个毒瘤水管工,他会造水管,有一天他造了一个水管网络,就像一个图。其中有一个点只有出边,就是起点,还有一个点只有入边,是终点。<br />
|
|
|
|
+点之间有一些管子,这些管子都有单位时间内的容量,现在毒瘤水管工想知道,他的管子在<strong>单位时间内</strong>在起点终点之间最多能流多少水。</p>
|
|
|
|
+<a id="more"></a>
|
|
|
|
+<h3 id="概念"><a class="markdownIt-Anchor" href="#概念"></a> 概念</h3>
|
|
|
|
+<ul>
|
|
|
|
+<li>源点:顾名思义,起点,一般用s表示</li>
|
|
|
|
+<li>汇点:顾名思义,终点,一般用t表示。。。</li>
|
|
|
|
+<li>容量:顾名思义。。。一条边单位时间内的的容量</li>
|
|
|
|
+<li>残余网络:进行增广后剩余的网络</li>
|
|
|
|
+<li>増广:</li>
|
|
|
|
+</ul>
|
|
|
|
+<blockquote>
|
|
|
|
+<p>増广就是在残余网络中寻找从源点到汇点的可行路径(増广路),并将该路径上的所有边的容量减去路径中的最小容量,形成新的残余网络,<strong>人话就是找一条能走的路,然后把路走掉。</strong><br />
|
|
|
|
+例如:<br />
|
|
|
|
+<img src="https://img-blog.csdnimg.cn/20200111112801923.png" alt="在这里插入图片描述" /><br />
|
|
|
|
+如果当前有这样一个残余网络,那么<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>s</mi><mo>→</mo><mn>4</mn><mo>→</mo><mn>1</mn><mo>→</mo><mi>t</mi></mrow><annotation encoding="application/x-tex">s\rightarrow4\rightarrow1\rightarrow t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.61508em;vertical-align:0em;"></span><span class="mord mathdefault">t</span></span></span></span>就是一条増广路,最小容量是4,进行増广过后就形成了这样一张图:<br />
|
|
|
|
+<img src="https://img-blog.csdnimg.cn/20200111114148208.png" alt="在这里插入图片描述" /><br />
|
|
|
|
+如何寻找増广路?直接dfs即可。</p>
|
|
|
|
+</blockquote>
|
|
|
|
+<ul>
|
|
|
|
+<li>反向边:</li>
|
|
|
|
+</ul>
|
|
|
|
+<blockquote>
|
|
|
|
+<p>有时候,程序増广的时候会出现爆炸性错误,例如还是那个图:<br />
|
|
|
|
+<img src="https://img-blog.csdnimg.cn/20200111112801923.png" alt="在这里插入图片描述" /><br />
|
|
|
|
+有两条増广路,万一程序选错了怎么办?<br />
|
|
|
|
+这时就要请出反向边了。<br />
|
|
|
|
+每次増广的时候,<strong>在残余网络上逆着増广路径建容量与増广路径最小容量相等的反向边</strong>,比如刚才那张图,就顺着<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>t</mi><mo>→</mo><mn>1</mn><mo>→</mo><mn>4</mn><mo>→</mo><mi>s</mi></mrow><annotation encoding="application/x-tex">t\rightarrow1\rightarrow4\rightarrow s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.61508em;vertical-align:0em;"></span><span class="mord mathdefault">t</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span>建容量为4的边。相当于把原来的那条路抵消掉了,如果増广时走过了反向边,就相当于把原来的増广撤回去了。<br />
|
|
|
|
+这就给了程序一个反悔的机会。</p>
|
|
|
|
+</blockquote>
|
|
|
|
+<h3 id="朴素算法"><a class="markdownIt-Anchor" href="#朴素算法"></a> 朴素算法</h3>
|
|
|
|
+<ol>
|
|
|
|
+<li>増广</li>
|
|
|
|
+<li>沿着増广路径建反向边</li>
|
|
|
|
+<li>如果源点与汇点依然连通,回到1</li>
|
|
|
|
+</ol>
|
|
|
|
+<h3 id="dinic优化"><a class="markdownIt-Anchor" href="#dinic优化"></a> Dinic优化</h3>
|
|
|
|
+<p>Dinic的优化就是用bfs建立了由s开始的一个分层图,每次寻找増广路时必须让边上的层数严格递增,就可以确保每一步都离汇点近了一些这样就不会陷入毒瘤数据卡成的死循环,比如这样的著名毒瘤数据:<br />
|
|
|
|
+在这个数据中,如果用朴素算法,就会让中间容量为1的边上下抖动抽搐,等到他抽了999次的时候才把上面和下面的999减没。如果用Dinic,两次直接求出999+999。</p>
|
|
|
|
+<h3 id="代码"><a class="markdownIt-Anchor" href="#代码"></a> 代码</h3>
|
|
|
|
+<p><a href="https://schtonn.github.io/404.html" target="_blank" rel="noopener"><code>404 Not Found(Click for more information)</code></a><br />
|
|
|
|
+完结!</p>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
@@ -284,60 +306,60 @@
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
-
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-<script>
|
|
|
|
- window.addEventListener('tabs:register', () => {
|
|
|
|
- let activeClass = CONFIG.comments.activeClass;
|
|
|
|
- if (CONFIG.comments.storage) {
|
|
|
|
- activeClass = localStorage.getItem('comments_active') || activeClass;
|
|
|
|
- }
|
|
|
|
- if (activeClass) {
|
|
|
|
- let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
|
|
|
|
- if (activeTab) {
|
|
|
|
- activeTab.click();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- if (CONFIG.comments.storage) {
|
|
|
|
- window.addEventListener('tabs:click', event => {
|
|
|
|
- if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
|
|
|
|
- let commentClass = event.target.classList[1];
|
|
|
|
- localStorage.setItem('comments_active', commentClass);
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-</script>
|
|
|
|
-
|
|
|
|
- </div>
|
|
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+ window.addEventListener('tabs:register', () => {
|
|
|
|
+ let activeClass = CONFIG.comments.activeClass;
|
|
|
|
+ if (CONFIG.comments.storage) {
|
|
|
|
+ activeClass = localStorage.getItem('comments_active') || activeClass;
|
|
|
|
+ }
|
|
|
|
+ if (activeClass) {
|
|
|
|
+ let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
|
|
|
|
+ if (activeTab) {
|
|
|
|
+ activeTab.click();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ if (CONFIG.comments.storage) {
|
|
|
|
+ window.addEventListener('tabs:click', event => {
|
|
|
|
+ if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
|
|
|
|
+ let commentClass = event.target.classList[1];
|
|
|
|
+ localStorage.setItem('comments_active', commentClass);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
|
|
-
|
|
|
|
- <div class="toggle sidebar-toggle">
|
|
|
|
- <span class="toggle-line toggle-line-first"></span>
|
|
|
|
- <span class="toggle-line toggle-line-middle"></span>
|
|
|
|
- <span class="toggle-line toggle-line-last"></span>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <aside class="sidebar">
|
|
|
|
- <div class="sidebar-inner">
|
|
|
|
-
|
|
|
|
- <ul class="sidebar-nav motion-element">
|
|
|
|
- <li class="sidebar-nav-toc">
|
|
|
|
- Table of Contents
|
|
|
|
- </li>
|
|
|
|
- <li class="sidebar-nav-overview">
|
|
|
|
- Overview
|
|
|
|
- </li>
|
|
|
|
- </ul>
|
|
|
|
-
|
|
|
|
- <!--noindex-->
|
|
|
|
- <div class="post-toc-wrap sidebar-panel">
|
|
|
|
- <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-3"><a class="nav-link" href="#前置知识"><span class="nav-number">1.</span> <span class="nav-text">前置知识</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#引入"><span class="nav-number">2.</span> <span class="nav-text">引入</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#概念"><span class="nav-number">3.</span> <span class="nav-text">概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#朴素算法"><span class="nav-number">4.</span> <span class="nav-text">朴素算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#dinic优化"><span class="nav-number">5.</span> <span class="nav-text">Dinic优化</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#代码"><span class="nav-number">6.</span> <span class="nav-text">代码</span></a></li></ol></div>
|
|
|
|
- </div>
|
|
|
|
- <!--/noindex-->
|
|
|
|
-
|
|
|
|
- <div class="site-overview-wrap sidebar-panel">
|
|
|
|
|
|
+
|
|
|
|
+ <div class="toggle sidebar-toggle">
|
|
|
|
+ <span class="toggle-line toggle-line-first"></span>
|
|
|
|
+ <span class="toggle-line toggle-line-middle"></span>
|
|
|
|
+ <span class="toggle-line toggle-line-last"></span>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <aside class="sidebar">
|
|
|
|
+ <div class="sidebar-inner">
|
|
|
|
+
|
|
|
|
+ <ul class="sidebar-nav motion-element">
|
|
|
|
+ <li class="sidebar-nav-toc">
|
|
|
|
+ Table of Contents
|
|
|
|
+ </li>
|
|
|
|
+ <li class="sidebar-nav-overview">
|
|
|
|
+ Overview
|
|
|
|
+ </li>
|
|
|
|
+ </ul>
|
|
|
|
+
|
|
|
|
+ <!--noindex-->
|
|
|
|
+ <div class="post-toc-wrap sidebar-panel">
|
|
|
|
+ <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-3"><a class="nav-link" href="#前置知识"><span class="nav-number">1.</span> <span class="nav-text"> 前置知识</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#引入"><span class="nav-number">2.</span> <span class="nav-text"> 引入</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#概念"><span class="nav-number">3.</span> <span class="nav-text"> 概念</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#朴素算法"><span class="nav-number">4.</span> <span class="nav-text"> 朴素算法</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#dinic优化"><span class="nav-number">5.</span> <span class="nav-text"> Dinic优化</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#代码"><span class="nav-number">6.</span> <span class="nav-text"> 代码</span></a></li></ol></div>
|
|
|
|
+ </div>
|
|
|
|
+ <!--/noindex-->
|
|
|
|
+
|
|
|
|
+ <div class="site-overview-wrap sidebar-panel">
|
|
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
|
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
|
<p class="site-author-name" itemprop="name">Schtonn</p>
|
|
<p class="site-author-name" itemprop="name">Schtonn</p>
|
|
<div class="site-description" itemprop="description"></div>
|
|
<div class="site-description" itemprop="description"></div>
|
|
@@ -372,21 +394,21 @@
|
|
</li>
|
|
</li>
|
|
</ul>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- </div>
|
|
|
|
- <div id="treefrog" style="text-align: center;margin-top: 18px;">
|
|
|
|
- <object type="application/x-shockwave-flash" style="outline:none;" data="/js/treefrog.swf?up_bodyColor=444444&up_pattern=0&up_flyColor=777777&up_tongueColor=555555&up_patternColor=000000&up_releaseFly=0&up_frogName=Froggie&up_backgroundImage=http://&up_bellySize=.5&up_footColor=444444&up_eyeColor=444444&up_backgroundColor=222222&" width="300" height="600"><param name="movie" value="http://cdn.abowman.com/widgets/treefrog/treefrog.swf?up_bodyColor=444444&up_pattern=0&up_flyColor=777777&up_tongueColor=555555&up_patternColor=000000&up_releaseFly=0&up_frogName=Froggie&up_backgroundImage=http://&up_bellySize=.5&up_footColor=444444&up_eyeColor=444444&up_backgroundColor=222222&"></param><param name="AllowScriptAccess" value="always"></param><param name="wmode" value="opaque"></param><param name="scale" value="noscale"/><param name="salign" value="tl"/></object>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- </aside>
|
|
|
|
- <div id="sidebar-dimmer"></div>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- </div>
|
|
|
|
- </main>
|
|
|
|
-
|
|
|
|
- <footer class="footer">
|
|
|
|
- <div class="footer-inner">
|
|
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+ <div id="treefrog" style="text-align: center;margin-top: 18px;">
|
|
|
|
+ <object type="application/x-shockwave-flash" style="outline:none;" data="/js/treefrog.swf?up_bodyColor=444444&up_pattern=0&up_flyColor=777777&up_tongueColor=555555&up_patternColor=000000&up_releaseFly=0&up_frogName=Froggie&up_backgroundImage=http://&up_bellySize=.5&up_footColor=444444&up_eyeColor=444444&up_backgroundColor=222222&" width="300" height="600"><param name="movie" value="http://cdn.abowman.com/widgets/treefrog/treefrog.swf?up_bodyColor=444444&up_pattern=0&up_flyColor=777777&up_tongueColor=555555&up_patternColor=000000&up_releaseFly=0&up_frogName=Froggie&up_backgroundImage=http://&up_bellySize=.5&up_footColor=444444&up_eyeColor=444444&up_backgroundColor=222222&"></param><param name="AllowScriptAccess" value="always"></param><param name="wmode" value="opaque"></param><param name="scale" value="noscale"/><param name="salign" value="tl"/></object>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </aside>
|
|
|
|
+ <div id="sidebar-dimmer"></div>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+ </main>
|
|
|
|
+
|
|
|
|
+ <footer class="footer">
|
|
|
|
+ <div class="footer-inner">
|
|
|
|
|
|
|
|
|
|
<div class="copyright">
|
|
<div class="copyright">
|
|
@@ -403,24 +425,24 @@
|
|
<span class="post-meta-divider">|</span>
|
|
<span class="post-meta-divider">|</span>
|
|
<div class="theme-info">Theme – <a href="https://muse.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a>
|
|
<div class="theme-info">Theme – <a href="https://muse.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a>
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+ </div>
|
|
|
|
+ </footer>
|
|
|
|
+ </div>
|
|
|
|
|
|
-
|
|
|
|
- </div>
|
|
|
|
- </footer>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- <script src="/lib/anime.min.js"></script>
|
|
|
|
- <script src="/lib/velocity/velocity.min.js"></script>
|
|
|
|
- <script src="/lib/velocity/velocity.ui.min.js"></script>
|
|
|
|
|
|
+
|
|
|
|
+ <script src="/lib/anime.min.js"></script>
|
|
|
|
+ <script src="/lib/velocity/velocity.min.js"></script>
|
|
|
|
+ <script src="/lib/velocity/velocity.ui.min.js"></script>
|
|
|
|
|
|
<script src="/js/utils.js"></script>
|
|
<script src="/js/utils.js"></script>
|
|
|
|
|
|
@@ -428,37 +450,37 @@
|
|
|
|
|
|
|
|
|
|
<script src="/js/schemes/muse.js"></script>
|
|
<script src="/js/schemes/muse.js"></script>
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
<script src="/js/next-boot.js"></script>
|
|
<script src="/js/next-boot.js"></script>
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css">
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-</body>
|
|
|
|
-</html>
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/katex@0/dist/katex.min.css">
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+</body>
|
|
|
|
+</html>
|