ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Solution Set -「LOCAL」冲刺省选 Round XXIII

2022-02-11 09:02:42  阅读:137  来源: 互联网

标签:结点 Set 省选 XXIII cdots le contributor 取值 sum


\(\mathscr{Summary}\)

  有一说一,虽然我炸了,但这场锻炼心态的效果真的好。部分分聊胜于无,区分度一题制胜,可谓针对性强的好题。

  A 题,相对性签到题。这个建图确实巧妙,多见见就好。

  B 题,小常数暴力卡常,证了复杂度就是正解,这……

  C 题,写了个伪解 ha 了差不多一个小时才 ck 掉,浪费了很多时间,策略问题啊。

\(\mathscr{Solution}\)

\(\mathscr{A}-\) 一般图带权多重匹配

  给定 \(\{a_n\}\),\(\{c_{n\times n}\}\),每次操作取一对 \((i,j)\),令 \(a_i\leftarrow a_i-1,a_j\leftarrow a_j-1\),代价为 \(c_{i,j}\)。求使 \(\{a_n\}\) 全为 \(0\) 的最小代价。

  \(n\le50\),\(a_i\le100\),\(k:=\sum_i[2\nmid a_i]\le8\)。


  这个 \(k\) 的限制一看就是 NPC 的问题的弱化,这提示我们从 \(\forall i,2\mid a_i\) 的情况入手。给出这样一个费用流建图(我的确难以解释这个手法的 motivation,抱歉 qwq):

  • 令 \(i\) 对应结点 \(i_1,i_2\),连接 \(\lang S,i_1,\frac{a_i}{2},0\rang\),\(\lang i_2,T,\frac{a_i}{2},0\rang\);
  • \(\forall i,j\),连接 \(\lang i_1,j_2,+\infty,c_{ij}\rang\)。

我的天呐这个图的最小费用就是答案!(可以自行验证。)

  考虑奇数,其实也没啥事了,\(\binom{k}{k/2}\) 枚举多出来的 \(1\) 放在 \(i_1\) 还是 \(i_2\)。最终复杂度为 \(\mathcal O\left(\binom{k}{k/2}\operatorname{Dinic}(2n+2,n+n^2)\right)\)。

\(\mathscr{B}-\) 排序

  (略有简化。)给定一棵含有 \(n\) 个结点,以结点 \(1\) 为根的树。每个叶子有一个非空取值集合,你需要构造叶子的取值方案,使得存在一种 DFS 方法使遍历到的叶子的值单调递增。若有解,输出取值方案及 DFS 方案。

  令 \(m_i\) 为 \(i\) 的取值集合大小(若 \(i\) 非叶,则 \(m_i=0\)),\(k\) 为结点最多拥有的孩子数量,则 \(n,\sum_i m_i\le10^5\),\(k\le8\)。保证取值集合所有元素互不相同。


  有一个非常显然的暴力:令 \(f(u)\) 表示 \(u\) 子树内极小取值区间集合,定义合法取值区间 \([l,r]\) 极小当且仅当不存在合法取值区间 \([l',r']\),使得 \(l\le l'\le r'\le r\)。转移时全排列枚举孩子顺序以及左端点,一路 lower bound 过去得到对应右端点,最后删掉不极小的取值区间。

  进一步,这个全排列过程可以优化为:枚举第一个孩子及其左端点,状压其余孩子求最小右端点。设 \(u\) 的孩子们的 \(f\) 集合大小为 \(s_1,s_2,\cdots,s_k\),则转移 \(u\) 的复杂度为 \(\mathcal O(\left(\sum_is_i\right)2^{k-1}\left(\sum_i\log s_i\right))\),其

N中 \(\log\) 是转移内部的 std::lower_bound,也许可以优化掉叭 awa;转移复杂度之和是算法瓶颈。

  加一个优化:若 \(u\) 只有一个孩子,作常数的处理之后直接继承这个孩子的 \(f\) 信息。

  好,现在我们证明这个暴力是对的(?!)

  考虑某片叶子 \(l\) 处的取值集合 \(S\),我们称 \(x\in S\) 是 \(u-\)contributor,当且仅当 \(x\) 是 \(f(u)\) 内某个区间的左端点。对于 \(l\) 的祖先 \(u\),定义 \(S_u=\{x\in S\mid x\text{ is }u-\text{contributor}\}\),初始时自然有 \(S_l=S\)。现对于 \(l\) 的拥有至少两个孩子祖先 \(v\),及 \(v\) 的父亲 \(u\),考虑 \(S_v\) 变到 \(S_u\) 的过程:

  显然 \(S_u\subseteq S_v\),显然 \(\forall x,y\in S_u\),\(x\neq y\),构成 \([x,x']\in f(u)\) 的转移区间序列 \(X=\lang [x,x_1],[x_2,x_3],\cdots\rang\) 与构成 \([y,y']\in f(u)\) 的转移区间序列 \(Y=\lang [y,y_1],[y_2,y_3],\cdots\rang\) 必然满足:\([x_2,x_3]\neq [y_2,y_3]\)。

  这一点表明,若 \(v-\)contributor 想要成为 \(v-\)contributor,就必然需要 \(v\) 的一个独一无二的 contributor 给予“支持”(注意并不一定消耗这个 contributor)。

  现在,我们抛却所有题目本身的性质,只考虑这个弱化限制下的 contributor 总量:设 \(u\) 的孩子们 \(v_1,v_2,\cdots,v_k\) 给到 \(u\) 的 contributor 数量是 \(c_1,c_2,\cdots,c_k\),不妨设 \(c_1\le c_2\le \cdots\le c_k\),根据我们的 contributor lemma,我们知道

\[c_k\le\sum_{i=1}^{k-1}|f(v_i)|. \]

因而

\[|f(u)|=\sum_{i=1}^{k}c_i\le\min\left\{2\sum_{i=1}^{k-1}|f(v_i)|,\sum_{i=1}^k|f(v_i)|\right\}. \]

不会了。你妈的,蚌埠住了。我不知道能不能用这个性质证复杂度,但暂时没 hack 掉。

\(\mathscr{C}-\) 传染

  给定一棵含有 \(n\) 个点的有边权的树,结点 \(u\) 爆炸会使与其距离不超过 \(r_u\) 的结点爆炸。求至少要人为起爆多少个结点才能使所有点爆炸。

  \(n\le3\times10^5\)。


  点分治 + Two-pointers 优化建图。每次考虑跨过点分中心 \(x\) 的爆炸传导路径,求到结点们分别按“引爆其他子树的能力”和“被其他子树引爆的能力”排序的序列 \(S,T\),发现每个 \(s\in S\) 连向 \(T\) 的前缀;\(s_i\) 能影响的结点是 \(s_{i+1}\) 能影响的子集。建虚点优化建图跑 Tarjan 即可。

  点数和边数都是 \(\mathcal O(n\log n)\) 的,不过排序序列造成了瓶颈 \(\mathcal O(n\log^2n)\)。不考虑 Radix Sort 等不讲武德的东西,猜测可以用边分树 + 归并处理两个序列做到 \(\mathcal O(n\log n)\)?

标签:结点,Set,省选,XXIII,cdots,le,contributor,取值,sum
来源: https://www.cnblogs.com/rainybunny/p/15881773.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有