123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
-
-
- <title>最小生成树 | Schtonn's Blog</title>
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
- <meta name="description" content="前置知识
存图方式(邻接表,邻接矩阵),并查集。 不会的快进入链接学习吧!
引入
生成树,就是从一个图中选中\(n-1\)条边,使得这些边构成一棵树,并包含图中的所有节点。 最小生成树,就是找到一种生成树,使得这个生成树的边权和最小。">
- <meta property="og:type" content="article">
- <meta property="og:title" content="最小生成树">
- <meta property="og:url" content="http://yoursite.com/2020/03/01/min-span-tree/index.html">
- <meta property="og:site_name" content="Schtonn's Blog">
- <meta property="og:description" content="前置知识
存图方式(邻接表,邻接矩阵),并查集。 不会的快进入链接学习吧!
引入
生成树,就是从一个图中选中\(n-1\)条边,使得这些边构成一棵树,并包含图中的所有节点。 最小生成树,就是找到一种生成树,使得这个生成树的边权和最小。">
- <meta property="og:locale" content="en_US">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103203601629.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103204749157.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103205741495.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103210306831.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103210445854.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103210621487.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103210727778.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103215213917.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103215304212.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103215356204.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103215507942.png">
- <meta property="og:image" content="https://img-blog.csdnimg.cn/20200103215600881.png">
- <meta property="article:published_time" content="2020-03-01T14:45:44.000Z">
- <meta property="article:modified_time" content="2020-03-03T12:40:44.827Z">
- <meta property="article:author" content="Schtonn">
- <meta property="article:tag" content="graph">
- <meta name="twitter:card" content="summary">
- <meta name="twitter:image" content="https://img-blog.csdnimg.cn/20200103203601629.png">
-
- <link rel="alternate" href="/atom.xml" title="Schtonn's Blog" type="application/atom+xml">
-
-
- <link rel="icon" href="/favicon.png">
-
-
- <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
-
-
- <link rel="stylesheet" href="/css/style.css">
- <meta name="generator" content="Hexo 4.2.0"></head>
- <body>
- <div id="container">
- <div id="wrap">
- <header id="header">
- <div id="banner"></div>
- <div id="header-outer" class="outer">
- <div id="header-title" class="inner">
- <h1 id="logo-wrap">
- <a href="/" id="logo">Schtonn's Blog</a>
- </h1>
-
- <h2 id="subtitle-wrap">
- <a href="/" id="subtitle">Schtonn's blog</a>
- </h2>
-
- </div>
- <div id="header-inner" class="inner">
- <nav id="main-nav">
- <a id="main-nav-toggle" class="nav-icon"></a>
-
- <a class="main-nav-link" href="/">Home</a>
-
- <a class="main-nav-link" href="/archives">Archives</a>
-
- </nav>
- <nav id="sub-nav">
-
- <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
-
- <a id="nav-search-btn" class="nav-icon" title="Search"></a>
- </nav>
- <div id="search-form-wrap">
- <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit"></button><input type="hidden" name="sitesearch" value="http://yoursite.com"></form>
- </div>
- </div>
- </div>
- </header>
- <div class="outer">
- <section id="main"><article id="post-min-span-tree" class="article article-type-post" itemscope itemprop="blogPost">
- <div class="article-meta">
- <a href="/2020/03/01/min-span-tree/" class="article-date">
- <time datetime="2020-03-01T14:45:44.000Z" itemprop="datePublished">2020-Mar-01</time>
- </a>
-
- </div>
- <div class="article-inner">
-
-
- <header class="article-header">
-
-
- <h1 class="article-title" itemprop="name">
- 最小生成树
- </h1>
-
- </header>
-
- <div class="article-entry" 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="https://schtonn.github.io/2020/03/01/union-find" target="_blank" rel="noopener">并查集</a>。 不会的快进入链接学习吧!</p>
- <h3 id="引入">引入</h3>
- <p>生成树,就是从一个图中选中<span class="math inline">\(n-1\)</span>条边,使得这些边构成一棵树,并包含图中的所有节点。 最小生成树,就是找到一种生成树,使得这个生成树的边权和最小。 <a id="more"></a></p>
- <h3 id="生成方式一prim">生成方式一:prim</h3>
- <p>这种方法有点类似<a href="http://baidu.physton.com/?q=dijkstra" target="_blank" rel="noopener" title="这都不会?">Dijstra</a>,就是每次从所有<span class="math inline">\(vis\)</span>过的点遍历能达到的边,从其中选择一条最小的,加入生成树。</p>
- <hr />
- <p>假设我们有这么一张图: <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103203601629.png" alt="弟弟" /></a></p>
- <p>就从0号点开始吧: <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103204749157.png" alt="在这里插入图片描述" /></a></p>
- <p>找到从<span class="math inline">\(0\)</span>出发的最小的边:<span class="math inline">\([0,2]\)</span>,边权为<span class="math inline">\(3\)</span>,那么对<span class="math inline">\(2\)</span>号点进行标记。 <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103205741495.png" /></a></p>
- <p>然后从<span class="math inline">\(0\)</span>号和<span class="math inline">\(2\)</span>号节点继续找,发现最小的是<span class="math inline">\([2,4]\)</span>边,那么就标记<span class="math inline">\(4\)</span>号节点。 <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103210306831.png" alt="在这里插入图片描述" /></a></p>
- <p>然后是<span class="math inline">\([4,1]\)</span>,<span class="math inline">\(1\)</span>号。 <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103210445854.png" alt="在这里插入图片描述" /></a></p>
- <p>以此类推,最后就生成出来了这样一个图:</p>
- <p><a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103210621487.png" alt="在这里插入图片描述" /></a></p>
- <p>把没有标记的边删掉,就是最小生成树。 <a href="https://csacademy.com/app/graph_editor" target="_blank" rel="noopener" title="点击查看生成工具"><img src="https://img-blog.csdnimg.cn/20200103210727778.png" /></a></p>
- <p>这就是prim算法 <del>,代码我不会写</del>在后面。</p>
- <h3 id="生成方式二kruskal">生成方式二:kruskal</h3>
- <p>这个算法本质上就是把所有边按照边权排序,然后直接<del>爆炸</del>按顺序判断要不要加进生成树里。 kruskal算法使用了一种极速闪电致命又自杀的东西:并查集。 <a href="https://schtonn.github.io/post/union-find-set" target="_blank" rel="noopener">他有多快呢?</a></p>
- <hr />
- <p>好了我们在建一个图模拟一下吧 <img src="https://img-blog.csdnimg.cn/20200103215213917.png" alt="在这里插入图片描述" /></p>
- <p>先给边排序。最小的是<span class="math inline">\([2,3]\)</span>,把他拿出来,判断一下。怎么判断呢?首先访问一下并查集看一看,这个边连接的两个点在不在同一个集合内,不在的话就把这条边加入生成树,然后把两个点合并。否则忽略这一条变,继续。这一条边符合要求,加进并查集里,现在<span class="math inline">\({2,3}\)</span>是一个集合,剩下都是独立的。</p>
- <p><img src="https://img-blog.csdnimg.cn/20200103215304212.png" alt="在这里插入图片描述" /> 现在最小的有<span class="math inline">\([1,4]\)</span>和<span class="math inline">\([4,5]\)</span>,我们都判断一下,都可以。 <img src="https://img-blog.csdnimg.cn/20200103215356204.png" alt="在这里插入图片描述" /></p>
- <p>然后就是<span class="math inline">\([0,4]\)</span>和<span class="math inline">\([2,4]\)</span>,依然都是可以的。 <img src="https://img-blog.csdnimg.cn/20200103215507942.png" alt="在这里插入图片描述" /> 这样,一颗活灵活现的生成树就出现了。 <img src="https://img-blog.csdnimg.cn/20200103215600881.png" /></p>
- <p>好了!</p>
- <h3 id="代码luogup3366">代码(<a href="https://www.luogu.com.cn/problem/P3366" target="_blank" rel="noopener">luoguP3366</a>)</h3>
- <p>kruskal的代码又短又易于理解,甚至可以直接用数组存边,所以他非常好写,推荐。</p>
- <h4 id="prim">prim</h4>
- <figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"iostream"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"queue"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"cstring"</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> maxm 5000010</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> maxn 1000010</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 0x3f3f3f3f</span></span><br><span class="line"><span class="keyword">int</span> ans=<span class="number">0</span>;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span>{</span></span><br><span class="line"> <span class="keyword">int</span> v,next,c;</span><br><span class="line">}e[maxm<<<span class="number">1</span>];</span><br><span class="line"><span class="keyword">int</span> h[maxn],tot,n,m;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">adde</span><span class="params">(<span class="keyword">int</span> u,<span class="keyword">int</span> v,<span class="keyword">int</span> c)</span></span>{</span><br><span class="line"> tot++;</span><br><span class="line"> e[tot].v=v;</span><br><span class="line"> e[tot].c=c;</span><br><span class="line"> e[tot].next=h[u];</span><br><span class="line"> h[u]=tot;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">int</span> dis[maxn];</span><br><span class="line"><span class="keyword">bool</span> vis[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">qu</span>{</span></span><br><span class="line"> <span class="keyword">int</span> id,dis;</span><br><span class="line"> <span class="keyword">bool</span> <span class="keyword">operator</span> < (<span class="keyword">const</span> qu t)<span class="keyword">const</span>{</span><br><span class="line"> <span class="keyword">return</span> dis>t.dis;</span><br><span class="line"> }</span><br><span class="line">};</span><br><span class="line">priority_queue<qu> q;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijk</span><span class="params">(<span class="keyword">int</span> s)</span></span>{</span><br><span class="line"> <span class="built_in">memset</span>(dis,<span class="number">0x3f</span>,<span class="keyword">sizeof</span>(dis));</span><br><span class="line"> <span class="built_in">memset</span>(vis,<span class="number">0</span>,<span class="keyword">sizeof</span>(vis));</span><br><span class="line"> <span class="keyword">while</span>(!q.empty())q.pop();</span><br><span class="line"> qu t;</span><br><span class="line"> t.dis=<span class="number">0</span>;</span><br><span class="line"> t.id=s;</span><br><span class="line"> dis[s]=<span class="number">0</span>;</span><br><span class="line"> q.push(t);</span><br><span class="line"> <span class="keyword">while</span>(!q.empty()){</span><br><span class="line"> t=q.top();q.pop();</span><br><span class="line"> <span class="keyword">if</span>(vis[t.id])<span class="keyword">continue</span>;</span><br><span class="line"> vis[t.id]=<span class="literal">true</span>;</span><br><span class="line"> ans+=t.dis;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=h[t.id];j;j=e[j].next){</span><br><span class="line"> <span class="keyword">int</span> v=e[j].v;</span><br><span class="line"> <span class="keyword">if</span>(!vis[v]&&dis[v]>e[j].c){</span><br><span class="line"> dis[v]=e[j].c;</span><br><span class="line"> qu now;</span><br><span class="line"> now.id=v;</span><br><span class="line"> now.dis=dis[v];</span><br><span class="line"> q.push(now);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="keyword">int</span> s=<span class="number">1</span>;</span><br><span class="line"> <span class="built_in">cin</span>>>n>>m;</span><br><span class="line"> <span class="keyword">int</span> u,v,c;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++){</span><br><span class="line"> <span class="built_in">cin</span>>>u>>v>>c;</span><br><span class="line"> adde(u,v,c);</span><br><span class="line">adde(v,u,c);</span><br><span class="line"> }</span><br><span class="line"> dijk(s);</span><br><span class="line"><span class="built_in">cout</span><<ans<<<span class="built_in">endl</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
- <h4 id="kruskal">kruskal</h4>
- <figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"iostream"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"algorithm"</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">int</span> n,m,tot,sum,f[<span class="number">5001</span>];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span>{</span></span><br><span class="line"> <span class="keyword">int</span> u,v,c;</span><br><span class="line">}a[<span class="number">200010</span>];</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">cmp</span><span class="params">(<span class="keyword">const</span> node &u,<span class="keyword">const</span> node &v)</span></span>{</span><br><span class="line"> <span class="keyword">return</span> u.c<v.c;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">getf</span><span class="params">(<span class="keyword">int</span> u)</span></span>{</span><br><span class="line"> <span class="keyword">if</span>(f[u]==u)<span class="keyword">return</span> u;</span><br><span class="line"> <span class="keyword">return</span> f[u]=getf(f[u]);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</span><br><span class="line"> <span class="built_in">cin</span>>>n>>m;</span><br><span class="line"> <span class="keyword">if</span>(m<n<span class="number">-1</span>){<span class="built_in">cout</span><<<span class="string">"orz"</span><<<span class="built_in">endl</span>;<span class="keyword">return</span> <span class="number">0</span>;}</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++)<span class="built_in">cin</span>>>a[i].u>>a[i].v>>a[i].c;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=n;i++)f[i]=i;</span><br><span class="line"> sort(a+<span class="number">1</span>,a+m+<span class="number">1</span>,cmp);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<=m;i++){</span><br><span class="line"> <span class="keyword">int</span> fu=getf(a[i].u),fv=getf(a[i].v);</span><br><span class="line"> <span class="keyword">if</span>(fu!=fv){</span><br><span class="line"> f[fu]=fv;</span><br><span class="line"> sum++;</span><br><span class="line"> tot+=a[i].c;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span>(sum==n<span class="number">-1</span>)<span class="keyword">break</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">cout</span><<tot<<<span class="built_in">endl</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
-
- </div>
- <footer class="article-footer">
- <a data-url="http://yoursite.com/2020/03/01/min-span-tree/" data-id="ck7cjuv750005pc1346vq1oag" class="article-share-link">Share</a>
-
-
- <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/graph/" rel="tag">graph</a></li></ul>
- </footer>
- </div>
-
-
- <nav id="article-nav">
-
- <a href="/2020/03/02/dinic/" id="article-nav-newer" class="article-nav-link-wrap">
- <strong class="article-nav-caption">Newer</strong>
- <div class="article-nav-title">
-
- 网络最大流-Dinic
-
- </div>
- </a>
-
-
- <a href="/2020/03/01/union-find/" id="article-nav-older" class="article-nav-link-wrap">
- <strong class="article-nav-caption">Older</strong>
- <div class="article-nav-title">并查集</div>
- </a>
-
- </nav>
-
- </article>
- </section>
-
- <aside id="sidebar">
-
-
-
-
- <div class="widget-wrap">
- <h3 class="widget-title">Tags</h3>
- <div class="widget">
- <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/graph/" rel="tag">graph</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/math/" rel="tag">math</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/other/" rel="tag">other</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/struct/" rel="tag">struct</a></li></ul>
- </div>
- </div>
-
-
- <div class="widget-wrap">
- <h3 class="widget-title">Tag Cloud</h3>
- <div class="widget tagcloud">
- <a href="/tags/graph/" style="font-size: 20px;">graph</a> <a href="/tags/math/" style="font-size: 10px;">math</a> <a href="/tags/other/" style="font-size: 15px;">other</a> <a href="/tags/struct/" style="font-size: 10px;">struct</a>
- </div>
- </div>
-
-
- <div class="widget-wrap">
- <h3 class="widget-title">Archives</h3>
- <div class="widget">
- <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/03/">March 2020</a></li></ul>
- </div>
- </div>
-
-
- <div class="widget-wrap">
- <h3 class="widget-title">Recent Posts</h3>
- <div class="widget">
- <ul>
-
- <li>
- <a href="/2020/03/02/segment-tree/">线段树</a>
- </li>
-
- <li>
- <a href="/2020/03/02/ferbonacci/">斐波那契数列-O(1)</a>
- </li>
-
- <li>
- <a href="/2020/03/02/dinic/">网络最大流-Dinic</a>
- </li>
-
- <li>
- <a href="/2020/03/01/min-span-tree/">最小生成树</a>
- </li>
-
- <li>
- <a href="/2020/03/01/union-find/">并查集</a>
- </li>
-
- </ul>
- </div>
- </div>
-
- </aside>
-
- </div>
- <footer id="footer">
-
- <div class="outer">
- <div id="footer-info" class="inner">
- © 2020 Schtonn<br>
- Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
- </div>
- </div>
- </footer>
- </div>
- <nav id="mobile-nav">
-
- <a href="/" class="mobile-nav-link">Home</a>
-
- <a href="/archives" class="mobile-nav-link">Archives</a>
-
- </nav>
-
- <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
-
- <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
-
- <script src="/fancybox/jquery.fancybox.pack.js"></script>
- <script src="/js/script.js"></script>
- </div>
- </body>
- </html>
|