• 国家候选队互测 2022 乱做


    D1T1 毛估估就行

    对于三个点 \(v,x,y\),若 \(x,y\) 的最短路经过 \(v\)\(v\) 的邻域,那么有 \(d(v,x)+d(v,y)-2\le d(x,y)\le d(v,x)+d(v,y)\),可以直接给出答案。

    于是可以每次找到度数最大的点,算出它到其它点的距离,然后删掉它和它的邻域,不断重复直到没有点为止。回答询问 \(x,y\) 时可以枚举 \(v\),找到 \(d(v,x)+d(v,y)\)\(\min\) 即可,单次复杂度 \(O(n)\)

    考虑分析预处理的复杂度,设第 \(i\) 次删除前有 \(m_i\) 条边,删除了当前度数最大的点 \(v_i\),有 \(deg(v_i)\ge 2m_i/n\)。于是有 \(\sum2m_i/n\leq \sum (deg(v_i)+1)=n\),所以复杂度为 \(O(n^2+\sum m_i)=O(n^2)\)。那么总复杂度为 \(O(n^2+qn)\),无法接受。

    考虑平衡复杂度,只删除 \(B\) 个点,那么回答单次询问复杂度 \(O(B)\)。但此外,还要计算未被删除的点两两之间的距离。注意到删除的是度数最大的 \(B\) 个点,于是剩下的点度数不超过 \(n/B\),剩下的边数不超过 \(n^2/B\),直接 bfs 即可做到 \(O(n^3/B)\)。总复杂度为 \(O(n^3/B+qB)\),取 \(B=O(n^{1.5}q^{-0.5})\),即可做到 \(O(n^{1.5}q^{0.5})\)

    https://uoj.ac/submission/527195

    D1T2 理论复杂度

    https://uoj.ac/submission/524975

    D1T3 广为人知题

    对 SAM 轻重链剖,记 \(f_u\)\(g_u\)) 表示以 \(u\) 结尾(开头)的路径数,那么 \((u,v)\) 为重边当且仅当 \(2f_u>f_v\land2g_v>g_u\)。这样把剖出的链依然满足类似树剖的性质:每个点恰属于一条重链,以及每条路径至多切换 \(O(\log n)\) 条重链。

    考虑如何快速地把一个询问串的路径拆成重链,可以对每条重链记录它对应的子串从哪开始,然后每次求 lcp 就能快速跳完一条重链了。

    考虑如何计算答案。对于询问串长为 \(l\) 的前缀,若它在 SAM 上对应的节点是 \(v\),那么以它结尾的模式串需要在 parent tree 中 \(v\) 到根的路径上且长度 \(\le l\) 。可以用这条路径上所有模式串减去长度 \(>l\) 的,发现后者只可能在 \(v\) 上。于是拆成重链后,前者可以预处理链上前缀和,后者可以转化为二维数点。

    https://uoj.ac/submission/527372

    D2T1 枪打出头鸟

    线性基求交:对于两个维数 \(\leq W\) 的线性基 \(A,B\),可以在 \(O(W^2)\) 的时间求出它们子空间的交的基。也就是选出尽量多的、线性无关的、能被 \(A,B\) 同时表示出的数。可以依次对每个 \(B_i\),看它能否被 \(A\cup\{B_1,\ldots,B_{i-1}\}\) 的子集异或出来,若行,则将此方案中属于 \(A\) 的子集的异或和加进交的基里。容易证明这样是对的。

    有了这个算法,就可以直接求出前缀线性基的交然后二分,单次询问复杂度 \(O(W\log n)\)。然后发现本质不同的前缀线性基至多 \(W\) 个,只用在其中二分即可做到 \(O(W\log W)\)。要更进一步,可以记录每一位主元在求交时被去掉的时间,然后回答时算出把 \(x\) 表示出的主元的最早去掉时间即可,这样是 \(O(W)\) 的。

    https://uoj.ac/submission/525807 (单次询问 \(O(W\log W)\)

    D2T2 伟大 NIT 的贸易计划

    一种和官方题解不一样的容斥做法。

    \(a_i\) 为离开 \(i\) 号点时的载货量,那么需要满足 \(a_{i+1}\le a_i+k\)(其中 \(a_{n+1}=a_1\))。考虑容斥,计算钦定 \(i\) 个 “\(\le\)” 改为 “\(>\)”,剩下的无限制的方案数。由于限制条件是一个环形结构,那么钦定出来的东西一定是若干条链,考虑计算每条链的生成函数(带上容斥系数)。这个容易用插板法得到,为 \(F(x)=\sum_{i\ge 0}(-1)^i{m-ik\choose i+1}x^{i+1}\)。于是将链拼成环后,最终答案就是 \([x^n]xF'(x)/(1-F(x))\)

    考虑用两种方法去求它:直接多项式求逆;或者发现 \(F\) 至多只有 \(m/k\) 项,然后线性递推。

    https://uoj.ac/submission/526825

    D2T3 可爱多的字符串

    咕。

  • 相关阅读:
    typescript提示implicitly has an 'any' type 问题
    element-ui中的table可分页多选功能-记住上一页勾选数据
    CSS加载会阻塞页面显示?
    网络流(EK算法)
    网络流(dinic算法)
    洛谷p1120小木棍(剪枝优化)
    三种背包模板
    HDU2089-不要62(数位dp)
    windy数(数位dp)
    素数判定(待填坑)
  • 原文地址:https://www.cnblogs.com/Y25t/p/15808564.html
Copyright © 2020-2023  润新知