<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Flow on Inftopia</title>
    <link>https://inftress.pages.dev/tags/flow/</link>
    <description>Recent content in Flow on Inftopia</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 07 May 2026 22:36:29 +0800</lastBuildDate>
    <atom:link href="https://inftress.pages.dev/tags/flow/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>全对最大流</title>
      <link>https://inftress.pages.dev/posts/%E5%85%A8%E5%AF%B9%E6%9C%80%E5%A4%A7%E6%B5%81/</link>
      <pubDate>Thu, 07 May 2026 22:36:29 +0800</pubDate>
      <guid>https://inftress.pages.dev/posts/%E5%85%A8%E5%AF%B9%E6%9C%80%E5%A4%A7%E6%B5%81/</guid>
      <description>&lt;p&gt;牛牛题。&lt;/p&gt;
&lt;p&gt;先讲我自己想到的部分。&lt;/p&gt;
&lt;p&gt;首先最大流肯定不好做，做最小割。&lt;/p&gt;
&lt;p&gt;然后显然有最小割树。&lt;/p&gt;
&lt;p&gt;但现在问题出在如何求最小割上。&lt;/p&gt;
&lt;p&gt;一个很大的问题是，你求最小割至少都要考虑所有的即一定是 $\Omega(n)$。&lt;/p&gt;
&lt;p&gt;然而如果这样时间复杂度就已经爆了。&lt;/p&gt;
&lt;p&gt;我一直的思路都是用数据结构扫描线啊啥的维护发现很难做。（也许可以做？我好像看到有人用 DS，有可能是把不同的步骤在 DS 上合在一起吧。）&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;然后题解做了个很厉害的事情，他说：&lt;strong&gt;平面图我们要想到对偶图&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;好的我们考虑他的对偶图。&lt;/p&gt;
&lt;p&gt;我们考虑我们求一次最小割，是在做什么事情。&lt;/p&gt;
&lt;p&gt;我们发现在对偶图上就是把 $s$ 和 $t$ 伸两条射线出去，然后做对偶图，就是上下两个无限平面的最短路。&lt;/p&gt;
&lt;p&gt;如果只是想到这里，我们只是得到了一个 $\Omega(n\log n)$ 的算法，但其实无论如何，这已经优于我们的朴素 DS 了（而且我们的朴素 DS 很难写）。&lt;/p&gt;
&lt;p&gt;我们想一下我们的根本诉求是什么，我们的根本诉求是，把这个最小割树转化为其他东西，而不是直接求最小割（因为这样一定会爆）。&lt;/p&gt;
&lt;p&gt;但若是我们继续想。我们递归之后做的是什么呢，我们做的其实是把左右分成两半，然后对于左边，就把右边整个缩为一个点，右边同理。&lt;/p&gt;
&lt;p&gt;我们首先就是想到，我们无论怎么分，实际上最多只有 $n$ 个无限平面，我们干脆提前分好，然后我们发现我们变成了是选两个无限平面使得最短路最短。&lt;/p&gt;
&lt;p&gt;实际上这就是在树上找最近的两个叶子。&lt;/p&gt;
&lt;p&gt;我们试图继续用这种找两个的方式选，然后我们想到我们既然不要这两个点，那我们把这俩合起来。我们看其他最小的两个叶子。&lt;/p&gt;
&lt;p&gt;Creatively，我们发现我们在做 kruskal。&lt;/p&gt;
&lt;p&gt;然后我们不想做 kruskal。&lt;/p&gt;
&lt;p&gt;面对 MST 最好用的就是 boruvka。&lt;/p&gt;
&lt;p&gt;然后我们使用 boruvka。&lt;/p&gt;
&lt;p&gt;我们如何找树上每个叶子最近的不同块的叶子呢。&lt;/p&gt;
&lt;p&gt;我们可以使用 DP，从下到上做一遍，从上到下做一遍，记录最小次小即可。&lt;/p&gt;
&lt;p&gt;然后我们就建出来了合并无限平面的树。&lt;/p&gt;
&lt;p&gt;但我们要得是最小割树。&lt;/p&gt;
&lt;p&gt;于是我们再对偶回去即可。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;就这个题最本质的 idea 是，你可以“发现你在做一个经典问题然后换一种解法”。比如把 kruskal 换成 boruvka。&lt;/p&gt;
&lt;p&gt;这仍然是灵活迁用，更本质的来说，这是把方法之间建立活的联想连接，而不是感觉连接。这对发散性思维有很高的要求。、&lt;/p&gt;
&lt;p&gt;然后其他一些重要的是平面图用对偶图。&lt;/p&gt;
&lt;p&gt;还有就是提前处理的思想，把无限平面分成 $n$ 个也可能是一个卡点。&lt;/p&gt;
&lt;p&gt;还有呢，就是一个贯彻思想的做法。比如你第一下找的是最近叶子，那你肯定也希望接下来也是最近叶子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;透过现象看本质&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cost Performance Flow</title>
      <link>https://inftress.pages.dev/posts/cost-performance-flow/</link>
      <pubDate>Mon, 04 May 2026 23:14:00 +0800</pubDate>
      <guid>https://inftress.pages.dev/posts/cost-performance-flow/</guid>
      <description>&lt;p&gt;唐唐题。&lt;/p&gt;
&lt;p&gt;考虑直接开导！&lt;/p&gt;
&lt;p&gt;我们很容易发现我们画在图像上，我们一定是优先节省这个费用最大的东西。&lt;/p&gt;
&lt;p&gt;然后我们把每次增广的这个流过去的流量与每流一次的代价啥的都算出来。&lt;/p&gt;
&lt;p&gt;然后直接贪心即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Boxes and Balls</title>
      <link>https://inftress.pages.dev/posts/boxes-and-balls/</link>
      <pubDate>Sat, 02 May 2026 20:40:42 +0800</pubDate>
      <guid>https://inftress.pages.dev/posts/boxes-and-balls/</guid>
      <description>&lt;p&gt;很厉害的题目。&lt;/p&gt;
&lt;p&gt;首先我们知道他是网络流。&lt;/p&gt;
&lt;p&gt;怎么流呢。&lt;/p&gt;
&lt;p&gt;其实最重要的呢，是这个条件如何刻画。&lt;/p&gt;
&lt;p&gt;我们要把这个条件转化为什么东西来进行这个刻画。&lt;/p&gt;
&lt;p&gt;一个 native 的想法是，你列成一个矩阵分别是当前阶段的这些位置和当前时间，然后像网格图一样穿起来。&lt;/p&gt;
&lt;p&gt;但你发现这样是完全不可行滴！因为你根本不知道每个位置现在是什么数。&lt;/p&gt;
&lt;p&gt;然后我们发现一个重要的观察，你要么是从上一个同一个数那里继承，然后就一直从那个时候一直霸占这个位置，要么呢就是现在开始，踢掉一个并放进去。&lt;/p&gt;
&lt;p&gt;还有就是，你发现关心这个具体是哪个位置放的是哪个数是十分愚蠢的，我们发现他只是一个霸占的过程，在你霸占的过程中呢你可以直接看作这个位置消失了，那你根本不需要知道哪个位置放的是哪个数，你只要知道有多少个位置被霸占即可。&lt;/p&gt;
&lt;p&gt;然后你发现你变成了，给一堆区间，然后你可以选一些区间（即霸占他们）并获得一些受益，但同一个时间不能选很多区间。&lt;/p&gt;
&lt;p&gt;然后这个就是经典模型，从 $1$ 到 $n$ 穿起来即可，容量为 $m-1$，代价为 $0$，然后在旁边接一些边，容量为 $1$ 费用为 $-w$，可以把这个流量引到旁边去表示你用了这个区间。&lt;/p&gt;
&lt;p&gt;注意我们同时只能有 $m-1$ 个被霸占，因为你每次还要放一个数进去。&lt;/p&gt;
&lt;p&gt;注意 $s,t$ 可能重合，有可能会死循环，注意特判或者多拉一条边。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
