<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>记录（OI 与数学） on Meze's Blog</title><link>https://meze0.top/categories/%E8%AE%B0%E5%BD%95oi-%E4%B8%8E%E6%95%B0%E5%AD%A6/</link><description>Recent content in 记录（OI 与数学） on Meze's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Meze</copyright><lastBuildDate>Wed, 11 Mar 2026 20:31:13 +0800</lastBuildDate><atom:link href="https://meze0.top/categories/%E8%AE%B0%E5%BD%95oi-%E4%B8%8E%E6%95%B0%E5%AD%A6/index.xml" rel="self" type="application/rss+xml"/><item><title>关于省选和以后</title><link>https://meze0.top/p/%E5%85%B3%E4%BA%8E%E7%9C%81%E9%80%89%E5%92%8C%E4%BB%A5%E5%90%8E/</link><pubDate>Wed, 11 Mar 2026 20:31:13 +0800</pubDate><guid>https://meze0.top/p/%E5%85%B3%E4%BA%8E%E7%9C%81%E9%80%89%E5%92%8C%E4%BB%A5%E5%90%8E/</guid><description>&lt;img src="https://meze0.top/" alt="Featured image of post 关于省选和以后" /&gt;&lt;h2 id="关于省选"&gt;关于省选
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;day1T1 不会&lt;/li&gt;
&lt;li&gt;day1T2 不会&lt;/li&gt;
&lt;li&gt;day1T3 不会&lt;/li&gt;
&lt;li&gt;day2T1 场上想到稳定 $2n-4$ 做法，询问每一段前缀和后缀，可以确定一些位置上的数字，如果不能确定该位置的具体数字，就必然能确定这个位置上的数大于等于几，把剩下的数字合法地填到相应位置上即可。&lt;/li&gt;
&lt;li&gt;day2T2 不会&lt;/li&gt;
&lt;li&gt;day2T3 不会&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的 OI 结束了（可能还会参加 NOIP2026），如你所见，很菜。&lt;/p&gt;
&lt;h2 id="其他"&gt;其他
&lt;/h2&gt;&lt;p&gt;人总倾向于向后张望，大抵是因为当下的重力太过苛责。九年级至中考后的那段光景，是我生命里鲜有的轻盈时刻，被一层如雾般不知真伪的“爱”意轻柔包裹。每当思绪逆流触碰那片水域，景象便如同隔着水面般抽象而破碎。我无法将其具象化，一旦试图细究，记忆便在时光的冲刷下弥散成雾。然而，正是这种剥离了现实锋芒的朦胧，在一次次的自我放逐中重构出纯粹的愉悦，引人向更深处沉溺。可追忆终是一场借来的梦，思绪一旦停转，我便又急速坠回那粗糙的现实，留给这副疲惫躯壳的，再无半点欢愉。&lt;/p&gt;
&lt;p&gt;这份粗糙的现实，大多源于高中岁月里那些晦涩的人际交织。说不清猜不透的前女友，容易起争执的同学，以及无孔不入的舆论，共同编织成了一张令人窒息的网。我深知自己的秉性——感知神经太过敏锐，却又缺乏圆融处世的情商。我不善言辞，那份笨拙的执拗让我在与人交锋时频频竖起倒刺，常常因为对某些事情的看法不同便与男生争吵；而在更柔软的社交维度里，我又退缩成一个彻底失语的局外人，几乎未曾与女生有过只言片语的交集。我当然也曾在心底渴求过同频的共鸣，但在现实的回音壁前，传回的往往只有失真的杂音。我只能将自己向内折叠，把仅有的希冀尽数倾注于网络，在那片由代码、算法与信息竞赛构筑的旷野里寻找庇护。可如今，随着最后一场比赛的落幕，这片我唯一能够活动的旷野，也随之轰然崩塌了。&lt;/p&gt;
&lt;p&gt;别人大都是初中甚至小学便开始学习竞赛了，而我初中时虽对网络世界感兴趣，学了些许 Linux 和 Web 渗透的皮毛，却对信息学奥赛一无所知。在我所在的初中，这同样是一个无人知晓的盲区。直到高一，我才刚刚知道。看着周围那些比我多学好几年的 OIer，懊悔感时常不可抑制地涌上心头——若我能早些了解信息竞赛，或许此刻的我也能与他们并肩。NOIP2025 成为了压垮我的最后一根稻草，我自认为具备省一的实力，妄图写出第二题，最终却磕死在了第二题上。在 NOIP2025 之后，我本该接受退役的定局，但或许是出于对现实的极度不愿接受，我还是执拗地走向了省选的考场。&lt;/p&gt;
&lt;p&gt;对于踏上信息竞赛这条路，我从未有过半分悔意，唯独遗憾于起步太晚，未能做好规划。至于以后，我或许会拾起最初的兴趣，将目光投向 CTF 赛事，去探寻那片我最初喜欢的领域。&lt;/p&gt;
&lt;p&gt;也许就是这样，即使我现在输得一无所获，但至少我曾来过。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;星图铺就的，未必是归途。 &lt;br&gt;
但有人循着它，便不算迷路。&lt;/p&gt;
&lt;div align="right"&gt;—— [省选联考 2026] starmap&lt;/div&gt;&lt;/blockquote&gt;</description></item><item><title>模板复习</title><link>https://meze0.top/p/%E6%A8%A1%E6%9D%BF%E5%A4%8D%E4%B9%A0/</link><pubDate>Tue, 03 Mar 2026 17:06:21 +0800</pubDate><guid>https://meze0.top/p/%E6%A8%A1%E6%9D%BF%E5%A4%8D%E4%B9%A0/</guid><description>&lt;img src="https://meze0.top/" alt="Featured image of post 模板复习" /&gt;&lt;h2 id="图论"&gt;图论
&lt;/h2&gt;&lt;h3 id="单源最短路"&gt;单源最短路
&lt;/h3&gt;&lt;h4 id="dijkstra"&gt;dijkstra
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P4779" target="_blank" rel="noopener"
 &gt;P4779 【模板】单源最短路径（标准版）&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e5&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll dis[N],vis[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;edge&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;edge&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; g[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;node&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll dis,u;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;bool&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;operator&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;(&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; node &lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;b) &lt;span style="color:#ff79c6"&gt;const&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; b.dis&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;dis;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;priority_queue&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;node,vector&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;node&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;,greater&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;node&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; q;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;dijkstra&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memset(dis,&lt;span style="color:#bd93f9"&gt;0x3f&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt; dis);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memset(vis,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt; vis);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push((node){&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,s});
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;q.empty()){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;q.top().u;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (vis[u]) &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vis[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (edge &lt;span style="color:#8be9fd;font-style:italic"&gt;ed&lt;/span&gt;:g[u]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ed.v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ed.w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (dis[v]&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;w){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push((node){dis[v],v});
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[u].push_back((edge){v,w});
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dijkstra();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld &amp;#34;&lt;/span&gt;,dis[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="spfa"&gt;spfa
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P3371" target="_blank" rel="noopener"
 &gt;P3371 【模板】单源最短路径（弱化版）&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e4&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll inq[N],dis[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;edge&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;edge&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; g[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;queue&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; q;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;spfa&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) dis[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;INT_MAX;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memset(inq,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt; inq);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push(s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inq[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;q.empty()){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;q.front();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; inq[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (edge &lt;span style="color:#8be9fd;font-style:italic"&gt;ed&lt;/span&gt;:g[u]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ed.v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;ed.w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (dis[v]&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;w){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;inq[v]) inq[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,q.push(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[u].push_back((edge){v,w});
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; spfa();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld &amp;#34;&lt;/span&gt;,dis[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="最小生成树"&gt;最小生成树
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P3366" target="_blank" rel="noopener"
 &gt;P3366 【模板】最小生成树&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=""&gt;
&lt;/h4&gt;&lt;h4 id="kruskal"&gt;Kruskal
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; M&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2e5&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,p[M],ans,cnt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;Edge&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;bool&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;operator&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;(&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; Edge &lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;b) &lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; w&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;b.w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}g[M];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll &lt;span style="color:#50fa7b"&gt;find&lt;/span&gt;(ll x){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (p[x]&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;x) p[x]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;find(p[x]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; p[x];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(Edge){u,v,w};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) p[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sort(g&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,g&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;m);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;g[i].u,v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;g[i].v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;g[i].w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll x&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;find(u),y&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;find(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (x&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;y) p[x]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;y,ans&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;w,cnt&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (cnt&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;n&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;,ans);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;orz&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="prim"&gt;prim
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="强连通分量"&gt;强连通分量
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/B3609" target="_blank" rel="noopener"
 &gt;[图论与代数结构 701] 强连通分量&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="tarjan"&gt;tarjan
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e4&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,cnt,sc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; g[N],ans[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll dfn[N],ins[N],low[N],scc[N],vis[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;stack&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;tarjan&lt;/span&gt;(ll u){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dfn[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;low[u]&lt;span style="color:#ff79c6"&gt;=++&lt;/span&gt;cnt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s.push(u);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ins[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (ll &lt;span style="color:#8be9fd;font-style:italic"&gt;v&lt;/span&gt;:g[u]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;dfn[v]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tarjan(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; low[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;min(low[u],low[v]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (ins[v]) low[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;min(low[u],dfn[v]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (dfn[u]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;low[u]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sc&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (s.top()&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;u){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;s.top();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scc[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;sc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ins[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scc[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;sc;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ins[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; s.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[u].push_back(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;dfn[i]) tarjan(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;,sc);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) ans[scc[i]].push_back(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (vis[scc[i]]) &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vis[scc[i]]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (ll &lt;span style="color:#8be9fd;font-style:italic"&gt;res&lt;/span&gt;:ans[scc[i]]) printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld &amp;#34;&lt;/span&gt;,res);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; putchar(&lt;span style="color:#f1fa8c"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="网络流"&gt;网络流
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P3376" target="_blank" rel="noopener"
 &gt;【模板】网络最大流&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="网络最大流ek"&gt;网络最大流（EK）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2e2&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; M&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5e3&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,s,t,ans;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll tot&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,h[N],dis[N],pre[N],vis[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;node&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll nxt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}e[M&lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;add&lt;/span&gt;(ll u,ll v,ll w){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;tot]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(node){v,w,h[u]};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; h[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tot;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;bool&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;bfs&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; memset(vis,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt; vis);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; queue&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; q;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push(s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vis[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e14&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;q.empty()){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;q.front();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;h[u];i;i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].nxt){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (vis[v]) &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;w) &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;min(dis[u],w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pre[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (v&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;t) &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;update&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;t;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (u&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;s){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;pre[u];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[v].w&lt;span style="color:#ff79c6"&gt;-=&lt;/span&gt;dis[t];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[v&lt;span style="color:#ff79c6"&gt;^&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;].w&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;dis[t];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[v&lt;span style="color:#ff79c6"&gt;^&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;].v;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ans&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;dis[t];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;s,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add(u,v,w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add(v,u,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (bfs()) update();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;,ans);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="网络最大流dinic当前弧优化"&gt;网络最大流（Dinic+当前弧优化）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2e2&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; M&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5e3&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; ll INF&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e14&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,s,t,ans;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll tot&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,h[N],dis[N],cur[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;struct&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;node&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll nxt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}e[M&lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;add&lt;/span&gt;(ll u,ll v,ll w){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;tot]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(node){v,w,h[u]};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; h[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;tot;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;bool&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;bfs&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) dis[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;INF,cur[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;h[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; queue&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; q;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push(s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[s]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;q.empty()){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;q.front();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.pop();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;h[u];i;i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].nxt){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (w&lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt;dis[v]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;INF){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; q.push(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; dis[t]&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;INF;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll &lt;span style="color:#50fa7b"&gt;dfs&lt;/span&gt;(ll u,ll sum){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (u&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;t) &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; sum;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll res&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (ll &lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;cur[u];i&lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt;sum;i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].nxt){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll v&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].v,w&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;e[i].w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (w&lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt;dis[v]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;dis[u]&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll k&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;dfs(v,min(sum,w));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;k) dis[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;INF;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[i].w&lt;span style="color:#ff79c6"&gt;-=&lt;/span&gt;k;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; e[i&lt;span style="color:#ff79c6"&gt;^&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;].w&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;k;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; res&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;k;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sum&lt;span style="color:#ff79c6"&gt;-=&lt;/span&gt;k;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; res;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;s,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v,w;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add(u,v,w);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add(v,u,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (bfs()) ans&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;dfs(s,INF);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;,ans);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="数据结构"&gt;数据结构
&lt;/h2&gt;&lt;h3 id="并查集"&gt;并查集
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P3367" target="_blank" rel="noopener"
 &gt;P3367 【模板】并查集&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2e5&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,p[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll &lt;span style="color:#50fa7b"&gt;find&lt;/span&gt;(ll x){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (p[x]&lt;span style="color:#ff79c6"&gt;!=&lt;/span&gt;x) p[x]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;find(p[x]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; p[x];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) p[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll z,x,y;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;z,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;y);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (z&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) p[find(x)]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;find(y);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (z&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (p[find(x)]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;p[find(y)]) puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;N&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="数学"&gt;数学
&lt;/h2&gt;&lt;h2 id="字符串"&gt;字符串
&lt;/h2&gt;&lt;h2 id="其他"&gt;其他
&lt;/h2&gt;</description></item><item><title>洛谷 3 月月赛 I</title><link>https://meze0.top/p/%E6%B4%9B%E8%B0%B7-3-%E6%9C%88%E6%9C%88%E8%B5%9B-i/</link><pubDate>Sun, 01 Mar 2026 17:51:34 +0800</pubDate><guid>https://meze0.top/p/%E6%B4%9B%E8%B0%B7-3-%E6%9C%88%E6%9C%88%E8%B5%9B-i/</guid><description>&lt;img src="https://meze0.top/" alt="Featured image of post 洛谷 3 月月赛 I" /&gt;&lt;p&gt;比赛链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;div1：&lt;a class="link" href="https://www.luogu.com.cn/contest/309087" target="_blank" rel="noopener"
 &gt;https://www.luogu.com.cn/contest/309087&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;div2：&lt;a class="link" href="https://www.luogu.com.cn/contest/309086" target="_blank" rel="noopener"
 &gt;https://www.luogu.com.cn/contest/309086&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;100+100+100+0+0+0&lt;/p&gt;
&lt;h2 id="astoi2037晴天"&gt;A.&lt;a class="link" href="https://www.luogu.com.cn/problem/P15545" target="_blank" rel="noopener"
 &gt;「Stoi2037」晴天&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;没什么好说的&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e6&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,s,x,p,ans&lt;span style="color:#ff79c6"&gt;=-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll a[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;s,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;x);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;a[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (a[i]&lt;span style="color:#ff79c6"&gt;!=-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) p&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;x&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;a[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (p&lt;span style="color:#ff79c6"&gt;&amp;gt;=&lt;/span&gt;s) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ans&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;i;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;\n&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#34;&lt;/span&gt;,ans);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="bstoi2037七里香"&gt;B.&lt;a class="link" href="https://www.luogu.com.cn/problem/P15546" target="_blank" rel="noopener"
 &gt;「Stoi2037」七里香&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;数学题和简单贪心，下文我们统一把 $a&amp;rsquo;_i$ 写作 $a_i$，观察原式子：
&lt;/p&gt;
$$
((j-1)k+a_j)-((i-1)k+a_i)
$$&lt;p&gt;
&lt;/p&gt;
$$
=(j-i)k+(a_j-a_i)
$$&lt;p&gt;注意到对于每一对 $(i,j)$ 会出现 $i(n-j+1)$ 次，总的计算得到：
&lt;/p&gt;
$$
Ans=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n} i(n-j+1)[(j-i)k+(a_j-a_i)]
$$&lt;p&gt;
&lt;/p&gt;
$$
=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n} i(n-j+1)(j-i)k+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}i(n-j+1)(a_j-a_i)
$$&lt;p&gt;
第一部分是一个定值，因此只需最大化第二部分。我们考虑计算求和完之后 $a_i$ 的系数 $c_i$，不难计算得到：
&lt;/p&gt;
$$
c_i=\sum_{m=1}^{i-1}m(n-i+1)-\sum_{m=i+1}^{n}i(n-m+1)
$$&lt;p&gt;
&lt;/p&gt;
$$
=\frac{i(n-i+1)(2i-n-1)}{2}
$$&lt;p&gt;
因此答案转化为：
&lt;/p&gt;
$$
Ans=k \sum_{i=1}^{n} i \cdot c_i+\sum_{i=1}^{n}c_i \cdot a_i
$$&lt;p&gt;
考虑怎么重排 $a_i$，只看第二部分，如果把 $c_i$ 从小到大排序，要想最大化此值，就让 $a_i$ 也从小到大排序去逐个相乘。最后的答案要使用 &lt;code&gt;__int128&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e5&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,k,a[N],c[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;print&lt;/span&gt;(__int128 x) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (x&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; putchar(&lt;span style="color:#f1fa8c"&gt;&amp;#39;-&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x&lt;span style="color:#ff79c6"&gt;=-&lt;/span&gt;x;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (x&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;9&lt;/span&gt;) print(x&lt;span style="color:#ff79c6"&gt;/&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; putchar(x&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;10&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;k);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;a[i]);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sort(a&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,a&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;n);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; __int128 ans&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; c[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;i&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;(n&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;i&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;(&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;n&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;/&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ans&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;(__int128)c[i]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;i&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;k;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sort(c&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;,c&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;n);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) ans&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;(__int128)a[i]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;c[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(ans);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cstoi2037白色风车"&gt;C.&lt;a class="link" href="https://www.luogu.com.cn/problem/P15547" target="_blank" rel="noopener"
 &gt;「Stoi2037」白色风车&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;考虑什么样的图可以使得点 $x$ 和点 $y$ 达到&lt;strong&gt;永远&lt;/strong&gt;，什么样的图不能。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;若两点不在一个连通图上，显然不可能。&lt;/li&gt;
&lt;li&gt;若两点所在的连通块内没有环（一棵树），也是不可能的。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在的连通块内存在环，注意 Subtask 3 提到了二分图。如果这张图不是二分图，说明存在奇环，只需要让这两棋子走到环中，再对向走，一定有一个方向可以使得两棋子走到同一条边上，因为棋子 $x$ 可以回头，此时两棋子只需要再同向走就能达到&lt;strong&gt;永远&lt;/strong&gt;。如果这个图是二分图，如果两棋子颜色一样（位于同一侧），两棋子无论怎么走颜色都一样，始终无法处于一条边上，因此无解；如果两棋子的颜色不一样，且二分图有环（没有环的情况已经被我们排除了），只需要让两棋子各自走到环中，然后对向走可以使得两棋子走到一条边上，棋子 $x$ 再往回走之后一起同向走便可实现&lt;strong&gt;永远&lt;/strong&gt;。&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;若两点所在的连通块不是二分图且有环，说明可以。&lt;/li&gt;
&lt;li&gt;若两点所在的连通块是二分图且有环，如果两点颜色一样，则无解。否则就可以。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这四个判断步骤走一遍就能涵盖所有情况。用 DFS 判断是否是二分图，同时判断图是否连通，再用连通块内点的个数和点的度数之和判断是不是树。复杂度是 $O(n+m)$。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;using&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;namespace&lt;/span&gt; std;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;typedef&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ll;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;const&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; N&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1e6&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll Tid,T;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll n,m,x,y;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vector&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;ll&lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; g[N];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ll vis[N],notb,color[N],du[N],cnt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;void&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;dfs&lt;/span&gt;(ll u){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cnt&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vis[u]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (ll &lt;span style="color:#8be9fd;font-style:italic"&gt;v&lt;/span&gt;:g[u]){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (vis[v]) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (color[v]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;color[u]) notb&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color[v]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;color[u]&lt;span style="color:#ff79c6"&gt;^&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dfs(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; du[u]&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; &lt;span style="color:#50fa7b"&gt;main&lt;/span&gt;(){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;Tid,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;T);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;while&lt;/span&gt; (T&lt;span style="color:#ff79c6"&gt;--&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;n,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;m,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;x,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;y);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) g[i].clear(),vis[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,color[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,du[i]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; notb&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,cnt&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ll u,v;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; scanf(&lt;span style="color:#f1fa8c"&gt;&amp;#34;%lld%lld&amp;#34;&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;u,&lt;span style="color:#ff79c6"&gt;&amp;amp;&lt;/span&gt;v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[u].push_back(v);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g[v].push_back(u);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dfs(x);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) du[&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;]&lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt;du[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;vis[y]) puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;No&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;(cnt&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;)&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;du[&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;]) puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;No&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (notb) puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;Yes&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (color[x]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;color[y]) puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;No&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; puts(&lt;span style="color:#f1fa8c"&gt;&amp;#34;Yes&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>计数题记录</title><link>https://meze0.top/p/%E8%AE%A1%E6%95%B0%E9%A2%98%E8%AE%B0%E5%BD%95/</link><pubDate>Fri, 27 Feb 2026 14:18:15 +0800</pubDate><guid>https://meze0.top/p/%E8%AE%A1%E6%95%B0%E9%A2%98%E8%AE%B0%E5%BD%95/</guid><description>&lt;img src="https://meze0.top/" alt="Featured image of post 计数题记录" /&gt;&lt;p&gt;这几天琢磨其他东西，差点忘了自己还有省选没有参加（虽然参不参加都进不了队），但还是想认真对待一下这次省选，就认真做几道题目吧。&lt;/p&gt;
&lt;h2 id="p14636-"&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P14636" target="_blank" rel="noopener"
 &gt;P14636 [NOIP2025] 清仓甩卖&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;性质转化+计数&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;考虑什么时候不合法&lt;/strong&gt;，我们可以把 $w_i=2$ 的物品看作两个定价为 $1$，原价为 $\frac{a_i}{2}$ 的物品，只不过这两个物品必须捆绑购买，这样我们所有的物品的定价就是 $1$ 元，我们只需要买原价前 $m$ 大的物品即可（注意到 $\frac{a_i}{2}$ 就是这个原物品的性价比，因此小 R 的排序方式与此等同），问题就在如果第 $m$ 个物品与第 $m+1$ 个物品是必须捆绑购买的，小 R 会放弃第 $m$ 个物品，向后寻找一个不被捆绑的物品（不妨设其为第 $k$ 个物品，$k$ 可能不存在）进行购买，如果此时第 $m-1$ 个物品是不被捆绑的，且 $v_{m-1}+v_{k} &amp;lt; v_m+v_{m+1}$（这里用 $v_i$ 表示按如上情景下第 $i$ 件物品的原价），小 R 的选法就不是最优的，形式化的如下：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;小 R 在剩余最后 $2$ 元的时候，此时有 $a_i&amp;gt;\frac{a_j}{2}&amp;gt;a_k$ 且 $a_j&amp;gt;a_i+a_k$，小 R 的选择不是最优的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;我们可以计算不合法的方案数&lt;/strong&gt;，我们不妨枚举每一对 $(i,j)$，使得 $a_i&amp;gt;\frac{a_j}{2}$ 且 $a_j&amp;gt;a_i$，再去寻找「第一个」符合条件的 $k$（第一个满足 $a_k&amp;lt;a_j-a_i$ 的 $k$），找 $k$ 的过程使用双指针可以做到 $O(n^2)$，容易发现其位置满足&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.....j....i...k...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们需要计算一对 $(i,j)$ 能够造出多上个不合法的方案&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$[1,j-1]$ 中的物品一定会被买。&lt;/li&gt;
&lt;li&gt;$[j+1,i-1]$ 中定价为 $1$ 的物品一定会被买到，定价为 $2$ 的则不会。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这两段，我们必须花掉 $m-2$ 元。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$[i+1,k-1]$ 中的物品不会被买到，且定价必须是 $2$。&lt;/li&gt;
&lt;li&gt;$[k,n]$ 中的物品不会被买到，定价随意（注意这里 $w_k$ 的取值也是随意的）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们只需计算 $m-2$ 用于分配的方案数，第一段每个先给保底 $1$ 元，还剩 $m-2-(j-1)=m-j-1$ 元，接着这些钱要分配给第一段中 $w=2$ 的物品和第二段中 $w=1$ 的物品各 $1$ 元。方案数是 $\binom{i-2}{m-j-1}$。第三段不用考虑。因为 $w_k$ 的取值也是随意的，所以第四段的方案数是 $2^{n-k+1}$。对于一组 $(i,j)$，能构造出的不合法的情况的方案数：
&lt;/p&gt;
$$
\binom{i-2}{m-j-1}\cdot 2^{n-k+1}
$$&lt;p&gt;
答案就是总的方案数减去不合法的方案数。
&lt;/p&gt;
$$
Ans=2^n-\sum_{(i,j,k)}\binom{i-2}{m-j-1}\cdot 2^{n-k+1}
$$&lt;h2 id="p10744-"&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P10744" target="_blank" rel="noopener"
 &gt;P10744 [SEERC 2020] Modulo Permutations&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;挖掘性质+排列DP+DP优化&lt;/strong&gt; &lt;br&gt;
首先注意到，当 $p_i&amp;lt;p_{i+1}$ 时，$p_i \mod p_{i+1}=p_{i+1}$，因此当 $p_i&amp;gt;2$ 时，接在它后面的数必须比它小，因此不难发现，合法的排列由两个结尾分别是 $1$ 和 $2$ 的递降的链构成。考虑 DP,考虑从大往小填充数字，令 $dp_{i,j}$ 表示以 $i$ 和 $j$ 结尾时的方案数，其中 $i&amp;lt;j$。则有如下 $O(n^2)$ 的转移，初始 $dp_{n-1,n}=1$。
&lt;/p&gt;
$$
\left \{ \begin{matrix}
 dp_{i-1,i} \gets dp_{i,j},j \mod (i-1) \le 2\\ 
dp_{i-1,j} \gets dp_{i,j}
\end{matrix}\right.
$$&lt;p&gt;
考虑优化 DP，注意到方程第二维只从原先更高的转移过来，因此我们把第二维单独摘出来，令 $dp_i$ 表示两个链的结尾最大是 $i$，从刚刚我所说的能看出来它的转移是不具有后效性的。有如下方程
&lt;/p&gt;
$$
dp_i=1+\sum_{j \in [i+1,n],j \mod (i-1)\le 2} dp_j
$$&lt;p&gt;
这里有一个 $+1$，意思是还有一个方案没有被考虑，两个链分别是&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n,n-1,n-2,...,i+1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;i
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们找这个 $j$ 的复杂度是 $O(\frac{n}{i})$，从如下数字中找&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$((i-1)+0) \cdot k$&lt;/li&gt;
&lt;li&gt;$((i-1)+1) \cdot k$&lt;/li&gt;
&lt;li&gt;$((i-1)+2) \cdot k$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样总的复杂度就是调和级数，$O(n \ln n)$。因为是一个环，最后的答案就是 $n \cdot dp_2$.优化部分不是很好想，给出核心代码加以理解。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; m &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; n &lt;span style="color:#ff79c6"&gt;-&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; m &lt;span style="color:#ff79c6"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; &lt;span style="color:#ff79c6"&gt;--&lt;/span&gt;m) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; cur_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (m &lt;span style="color:#ff79c6"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;3&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; k &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; k &lt;span style="color:#ff79c6"&gt;*&lt;/span&gt; m &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n; &lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;k) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; base &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; k &lt;span style="color:#ff79c6"&gt;*&lt;/span&gt; m;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// j 必须大于 m + 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (base &lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt; m &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) cur_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;(cur_sum &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; f[base]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n &lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt; base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;m &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) cur_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; (cur_sum &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; [base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n &lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt; base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;gt;&lt;/span&gt;m &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) cur_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; (cur_sum &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; [base &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 当 m = 1 或 2 时，任何数 mod 它必然 &amp;lt;= 2，直接累加所有有效的 j
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; j &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; m &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;; j &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n; &lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;j) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cur_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; (cur_sum &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; f[j]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; f[m &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; cur_sum;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="p10741-"&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P10741" target="_blank" rel="noopener"
 &gt;P10741 [SEERC 2020] Fence Job&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;性质转化+计数DP&lt;/strong&gt; &lt;br&gt;
题目等同于让某一个数向周围比它大的扩散，问可以产生多少种排列。我们先预处理出来每个数可以覆盖的范围，对于 $h_i$，他可以覆盖 $[l_i,r_i]$ 下标内的所有数。我们在一个空的排列上依次填数即可，考虑 DP，设 $dp_{i,j}$ 表示处理到排列的第 $i$ 个位置，要填入 $h_j$ 的方案数。前提是保证 $l_j \le i \le r_j$，否则 $dp_{i,j}=0$。同时注意到产生的新排列的每个数在原排列中的下标是单调不降的。于是
&lt;/p&gt;
$$
dp_{i,j}=\sum_{k=1}^{j}dp_{i-1,k}
$$&lt;p&gt;
这一步可以用前缀和实现，复杂度是 $O(n^2)$。答案就是
&lt;/p&gt;
$$
Ans=\sum_{i=1}^{n}dp_{n,i}
$$&lt;h2 id="at_"&gt;&lt;a class="link" href="https://atcoder.jp/contests/dp/tasks/dp_t" target="_blank" rel="noopener"
 &gt;AT_dp_t Permutation&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;排列计数DP+插入法技巧&lt;/strong&gt; &lt;br&gt;
因为给了相邻两项的大小关系，没有具体数值的要求，所以考虑插入法（&lt;a class="link" href="https://www.luogu.com.cn/article/xt2szowt" target="_blank" rel="noopener"
 &gt;https://www.luogu.com.cn/article/xt2szowt&lt;/a&gt;），就是对待填入数字在已知排列中的排名进行 DP，设 $dp_{i,j}$ 表示考虑到第 $i$ 个位置，第个位置上的数在前 $i$ 个数当中排名为 $j$。有如下转移
&lt;/p&gt;
$$
\operatorname{if} s_i='&lt;' \ , \ dp_{i,j}=\sum_{k=1}^{j-1} dp_{i-1,k}
$$&lt;p&gt;
&lt;/p&gt;
$$
\operatorname{if} s_i='&gt;' \ , \ dp_{i,j}=\sum_{k=j}^{i-1} dp_{i-1,k}
$$&lt;p&gt;关于初始化，$dp_{1,1}=1$，这是因为我们只考虑相对大小，不对该位置上的具体数值进行讨论，因此只有一种情况，对方程进行一下前缀和优化就能做到 $O(n^2)$。&lt;/p&gt;
&lt;h2 id="heading"&gt;&lt;a class="link" href="https://atcoder.jp/contests/abc282/tasks/abc282_g" target="_blank" rel="noopener"
 &gt;[ABC282G] Similar Permutation&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;排列计数DP+插入法技巧&lt;/strong&gt; &lt;br&gt;
这道题下相当于上一道的二维的加强版，令 $dp_{i,j,k,p}$ 表示处理到第 $i$ 个元素中，$A_i$ 排名为 $j$，$B_i$ 排名为 $k$，有 $p$ 处满足限制。初始时 $dp_{1,1,1,0}=1$，有 $O(n^5k)$ 转移。
&lt;/p&gt;
$$
dp_{i,j,k,p} =\sum_{x=1}^{j-1} \sum_{y=1}^{k-1} dp_{i-1,x,y,p-1}+\sum_{x=j}^{i-1} \sum_{y=k}^{i-1} dp_{i-1,x,y,p-1}+\sum_{x=1}^{j-1} \sum_{y=k}^{i-1} dp_{i-1,x,y,p}+\sum_{x=j}^{i-1} \sum_{y=1}^{k-1} dp_{i-1,x,y,p}
$$&lt;p&gt;
这里用二维前缀和即可做到 $O(n^3k)$。
&lt;/p&gt;
$$
sum_{i,j,k,p}=\sum_{x=1}^{j} \sum_{y=1}^{k} dp_{i,x,y,p}
$$&lt;h2 id="p14568-mx-s12-t3排列"&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P14568" target="_blank" rel="noopener"
 &gt;P14568 【MX-S12-T3】排列&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;排列计数DP+插入法技巧&lt;/strong&gt; &lt;br&gt;
这道题我认为还是很难理解的。对于排列中的数字，不仅有前缀的限制，也有后缀的限制，传统的像前两道题的 DP 状态只能解决一个方向，我们干脆对“位置”进行放置，意思就是我们按照位置的顺序（第 $1$ 个数、第 $2$ 个数 $\dots$ 第 $n$ 个数），依次把它们放进一个“按照值从小到大排序的虚空序列”里。设 $dp_{i,j}$ 表示安排了前 $i$ 个位置，为后来的位置留下了 $j$ 个“合法”（不影响前 $i$ 个位置的合法性）的空隙。 &lt;br&gt;
对于 $op_i \in { 0,1 } $，我们放置的第 $i$ 个位置必须在所留下的空隙的最左面或最右面，放下的同时也会产生两个空隙，后来的位置可以随便插不会影响第 $i$ 个位置
&lt;/p&gt;
$$
dp_{i,j}=dp_{i-1,j-1}
$$&lt;p&gt;
对于 $op_i \in { 2,3 } $，我们可以把第 $i$ 个位置插入到任意一个空隙中，但对后来的位置，其左边或右边的所有空隙不再合法。因此他会从 $dp_{i-1,\ge j}$ 的状态中转移过来。这里有一个上限是 $i$，因为 $i-1$ 个位置最多产生 $i$ 个空隙。
&lt;/p&gt;
$$
dp_{i,j}=\sum_{k=j}^{i} dp_{i-1,k}
$$&lt;p&gt;
同时注意到当 $op_i=2/3$ 时，后面不能再出现 $op_j=0/1$。（注：$0$ 对应 $2$，$1$ 对应 $3$），这里只需特判一下。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// 逻辑矛盾预检：一旦出现后缀最值(2/3)，未来不可能出现前缀最值(0/1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;bool&lt;/span&gt; flag2 &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;false&lt;/span&gt;, flag3 &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; i &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n; i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt; flag2) { cout &lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;amp;&amp;amp;&lt;/span&gt; flag3) { cout &lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;&amp;lt;&amp;lt;&lt;/span&gt; endl; &lt;span style="color:#ff79c6"&gt;return&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;) flag2 &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;3&lt;/span&gt;) flag3 &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#8be9fd;font-style:italic"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后的答案就是
&lt;/p&gt;
$$
Ans=\sum_{j=1}^{n+1}dp_{n,j}
$$&lt;p&gt;
第二步转移使用后缀和即可。给出核心代码加以理解。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// 初始化第 1 个元素
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;||&lt;/span&gt; op[&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dp[&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][&lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; &lt;span style="color:#6272a4"&gt;// 没有任何限制，左右两侧的2 个空隙均合法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dp[&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; &lt;span style="color:#6272a4"&gt;// 封杀了一侧，只剩下 1 合法空隙
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// 状态转移
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;; i &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n; i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;if&lt;/span&gt; (op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt; &lt;span style="color:#ff79c6"&gt;||&lt;/span&gt; op[i] &lt;span style="color:#ff79c6"&gt;==&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 必然插在极值端，合法空隙增加 1 个(j 从 j-1 转移而来)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 上一步最多有 i 个空隙，所以这一步多产生 i+1 个空隙
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; j &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;2&lt;/span&gt;; j &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; i &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; j&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dp[i][j] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; dp[i &lt;span style="color:#ff79c6"&gt;-&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][j &lt;span style="color:#ff79c6"&gt;-&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 可以插在任意合法的空隙，但会封杀左或右侧
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 导致合法空隙缩小为 j (需要上一层&amp;gt;= j 的状态累加)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; suffix_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// 上一步最多只有 i 个空隙，直接从 i逆序求后缀和即可，清晰明了！
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; j &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; i; j &lt;span style="color:#ff79c6"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; j&lt;span style="color:#ff79c6"&gt;--&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; suffix_sum &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; (suffix_sum &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; dp[i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][j]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dp[i][j] &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; suffix_sum;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// 最终答案统计
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// n 个位置全部处理完毕后，不论剩下多少个合法隙，每一种终点状态都代表一种完美的排列方案
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ans &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt; (&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; j &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; j &lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt; n &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; &lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;; j&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ans &lt;span style="color:#ff79c6"&gt;=&lt;/span&gt; (ans &lt;span style="color:#ff79c6"&gt;+&lt;/span&gt; dp[n][j]) &lt;span style="color:#ff79c6"&gt;%&lt;/span&gt; MOD;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="heading-1"&gt;&lt;a class="link" href="https://atcoder.jp/contests/agc054/tasks/agc054_b" target="_blank" rel="noopener"
 &gt;[AGC054B] Greedy Division&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;性质转化+排列计数DP+切换计数对象&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;考虑最终两人手上的排列都是什么情况，如果一人手中的数集是 $S$，另一人手中的数集则是 $S&amp;rsquo;$。则对于唯一的 $S$，可以构造出的排列数是 $|S|! \cdot (n-|S|)!$。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;对于两个 $S$ 和 $S&amp;rsquo;$，对两数集进行排列，重新排列后的两数集按照题目中的规则可唯一合并为一个排列，即：
&lt;/p&gt;
$$
\left \{ S_{一种排列} ,S'_{一种排列} \right \} \Leftrightarrow \left \{ W_{一种合法的排列} \right \} 
$$&lt;/blockquote&gt;
&lt;p&gt;可以发现对于一中选择 $S$，能产生的方案数只与大小有关。考虑 DP，设 $dp_{i,j,k}$ 表示对于前 $i$ 个数，选了 $j$ 个数，总和为 $k$ 的方案数。有如下转移：
&lt;/p&gt;
$$
dp_{i,j,k}=dp_{i-1,j-1,k-w_i}+dp_{i-1,j,k}
$$&lt;p&gt;
最终答案就是：
&lt;/p&gt;
$$
Ans=\sum_{i=1}^{n} dp_{n,i,\frac{sum}{2}} \cdot i! \cdot (n-i)!
$$&lt;p&gt;
注意当 $\frac{sum}{2}$ 为奇数时无解。时间复杂度在 $O(n^2 \cdot \sum w_i)$。&lt;/p&gt;
&lt;h2 id="p14364-"&gt;&lt;a class="link" href="https://www.luogu.com.cn/problem/P14364" target="_blank" rel="noopener"
 &gt;P14364 [CSP-S 2025] 员工招聘&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;排列计数DP+贡献延后计算&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;设 $dp_{i,j,k}$ 表示处理到第 $i$ 天，有 $j$ 个人不通过，⌈钦定⌋ 了 $k$ 个满足 $c \le j$ 的位置，此时的方案数。这个状态可能比较难以理解，我们只考虑钦定的这 $k$ 个位置造成的方案数，不考虑剩下 $i-k$ 个位置的具体内容。我们规定 $cnt_j$ 表示 $c=j$ 的人数，$sum_j$ 表是 $c \le j$ 的人数，我们考虑向后转移&lt;/p&gt;
&lt;p&gt;如果 $s_{i+1}=1$，选择 $c&amp;gt;j$ 的人可以通过面试，有如下转移&lt;/p&gt;
$$
dp_{i+1,j,k} \gets dp_{i,j,k}
$$&lt;p&gt;选择 $c \le j$ 的则不会通过，考虑怎么转移，此时有 $j+1$ 个人不能通过，枚举前 $i$ 个人当中有 $p$ 个 $c=j+1$，新状态就是 $dp_{i+1,j+1,k+1+p}$.我们需要在原来 $i-k$ 个位置中选出 $p$ 个位置来放置这 $p$ 个 $c=j+1$，即 $\binom{i-k}{p}$，还要从那些 $c=j+1$ 的人当中选出 $p$ 个来填充这些位置，这 $p$ 个人也可以随意排列，方案数是 $\binom{cnt_{j+1}}{p}p!$，再从所有未被钦定的 $c \le j$ 的当中选一个，即 $\binom{sum_j-k}{1}=(sum_{j}-k)$。有如下转移：&lt;/p&gt;
$$
dp_{i+1,j+1,k+1+p} \gets \binom{i-k}{p}\binom{cnt_{j+1}}{p}p!(sum_j-k)dp_{i,j,k}
$$&lt;p&gt;如果 $s_{i+1}=0$，按照上面的情况讨论即可，如果选择 $c&amp;gt;j+1$，有如下转移：&lt;/p&gt;
$$
dp_{i+1,j+1,k+p} \gets \binom{i-k}{p} \binom{cnt_{j+1}}{p}p!dp_{i,j,k}
$$&lt;p&gt;若选择 $c \le j+1$，有如下转移：&lt;/p&gt;
$$
dp_{i+1,j+1,k+p+1} \gets \binom{i-k}{p} \binom{cnt_{j+1}}{p}p!(sum_{j+1}-p-k)dp_{i,j,k}
$$&lt;p&gt;最终答案就是枚举不通过人数到 $n-m$。&lt;/p&gt;
$$
Ans=\sum_{i=1}^{n-m} dp_{n,i,sum_i}(n-sum_{i})!
$$&lt;p&gt;如果难以理解可以看代码&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;newdp[&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;][&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;]&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;&lt;/span&gt;n;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	memcpy(olddp,newdp,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt;(newdp));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	memset(newdp,&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;,&lt;span style="color:#ff79c6"&gt;sizeof&lt;/span&gt;(newdp));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; j&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;j&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;i;j&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; k&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;k&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;min(sum[j],i);k&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt;(&lt;span style="color:#ff79c6"&gt;!&lt;/span&gt;olddp[j][k]) &lt;span style="color:#ff79c6"&gt;continue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt;(s[i&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]&lt;span style="color:#ff79c6"&gt;==&lt;/span&gt;&lt;span style="color:#f1fa8c"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				(newdp[j][k] &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; olddp[j][k]) &lt;span style="color:#ff79c6"&gt;%=&lt;/span&gt; Mod;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; p&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;p&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;min(i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k,cnt[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]);p&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					(newdp[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][k&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;p&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; C[i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k][p]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;C[cnt[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]][p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;jc[p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;(sum[j]&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k)&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;olddp[j][k]) &lt;span style="color:#ff79c6"&gt;%=&lt;/span&gt; Mod;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			&lt;span style="color:#ff79c6"&gt;else&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; p&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;p&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;min(i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k,cnt[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]);p&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;){
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					&lt;span style="color:#6272a4"&gt;//&amp;lt;=j+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					(newdp[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][k&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;p&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;] &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; C[i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k][p]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;C[cnt[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]][p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;jc[p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;olddp[j][k]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;(sum[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;p&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k)) &lt;span style="color:#ff79c6"&gt;%=&lt;/span&gt; Mod;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					&lt;span style="color:#6272a4"&gt;//&amp;gt;j+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;					(newdp[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;][k&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;p] &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; C[i&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;k][p]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;C[cnt[j&lt;span style="color:#ff79c6"&gt;+&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;1&lt;/span&gt;]][p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;jc[p]&lt;span style="color:#ff79c6"&gt;%&lt;/span&gt;Mod&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;olddp[j][k]) &lt;span style="color:#ff79c6"&gt;%=&lt;/span&gt; Mod;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;				}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;			}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;		}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; &lt;span style="color:#8be9fd"&gt;long&lt;/span&gt; ans&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;for&lt;/span&gt;(&lt;span style="color:#8be9fd"&gt;int&lt;/span&gt; i&lt;span style="color:#ff79c6"&gt;=&lt;/span&gt;&lt;span style="color:#bd93f9"&gt;0&lt;/span&gt;;i&lt;span style="color:#ff79c6"&gt;&amp;lt;=&lt;/span&gt;n&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;m;i&lt;span style="color:#ff79c6"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	(ans &lt;span style="color:#ff79c6"&gt;+=&lt;/span&gt; newdp[i][sum[i]]&lt;span style="color:#ff79c6"&gt;*&lt;/span&gt;jc[n&lt;span style="color:#ff79c6"&gt;-&lt;/span&gt;sum[i]]) &lt;span style="color:#ff79c6"&gt;%=&lt;/span&gt; Mod;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;这篇题解如何体现 ⌈贡献延后计算⌋？（Gemini 3.1 Pro 总结） &lt;br&gt;
传统的排列 DP 是“走到哪，填到哪，算到哪”。但在本题中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;只占坑，不结账（延后）&lt;/strong&gt;： 当某天面试难度低（$s=1$）时且选择了能够通过的人，我们不急着决定今天具体录用谁，而是把这一天当成一个“空白名额”积攒下来，此时方案数直接继承（即不乘任何组合数，延后贡献计算）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;触碰底线，集中清算（兑现）&lt;/strong&gt;： 当不通过人数增加（$j \gets j+1$）时，那些忍耐度为 $c=j+1$ 的人到了必须被安排的生死线。此时我们才回溯，从之前积攒的“空白名额”中抽出几个，把这批人填进去。这时才一次性乘上对应的组合数与排列数，完成历史贡献的集中清算。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这就是贡献延后计算：先把空位留着，等特定元素的限制条件被触发时，再统一计算它们填入空位的排列方案。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>