2024.3 总结 2 / 她的所爱不断贬值最后现实发出一声冷笑

上一坑 写的时候把电脑弄炸了,可能某校的电脑支撑不了这个长度,所以再开一个。

这次是顺序总结。

鉴于笔者的懒惰变成了乱序总结。

然后写着写着懒得写了。。。。挑着记了。


link [tag: 网络流]

首先我们需要充分了解最大权闭合子图:对于一个有向图,点 \(u\) 有权 \(w_u\in \mathbb{Z}\),边 \(u\to v\) 表示选了 \(u\) 就必须选 \(v\),你需最大化 \(\sum_{u\in S}w_u\),其中 \(S\) 是满足边关系的点集。

做法是对于 \(w_u\geq 0\) 的点建边 \(S\to u:w_u\),对于 \(w_u<0\) 的点建边 \(u\to T:-w_u\),对于限制建边 \(u\to v:inf\)。没有限制的话答案为 \(\sum_{w_u>0}w_u\),我们希望知道至少减少多少贡献才能使得限制被满足,这个就是这个图的最小割,这个图很完整描述了不能同时满足的限制,说明如下:

  • \(u\) 的话必须选 \(v\) 那么必须满足所有选 \(v\) 的限制,在图上也恰好是给 \(u\) 接上了 \(v\) 的限制。

  • 一条增广路 \(S\to p_1\to\dots\to p_m\to T\) 表示了选择 \(S\) 就必须选 \(T\),中间的 inf 一定不在最小割中,所以必须不要 \(p_1\) 的贡献或者必须上交 \(p_m\) 的贡献必须满足至少一种,这个一定被割隔开。

原题不考虑集合大小限制就是一个最大权闭合子图,现在考虑怎么加入 \(|S|=|N(S)|\) 的限制,因为题目给了 \(|N(S)|\geq |S|\) 的条件了,我们现在只需要约束 \(|N(S)|\leq |S|\) 也就是 \(|N(S)|\downarrow\),根据 hall 定理我们选出来的集合有完美匹配,这启发我们对于 \(S\to N(S)\) 我们可以随便钦定 \(|S|\) 对匹配关系,然后对于 \(S\) 我们不希望 \(N(S)\) 中有非匹配的元素,那么我们不妨将元素的代价全都加上一个很大的偏移量 \(\Delta\),然后匹配关系中元素要统一 \(+\Delta\) 那么集合统一 \(-\Delta\),这样子额外元素选了不优,匹配元素贡献抵消,再去做最大权闭合子图即可。


link [tag: 数据结构]

考虑四个格子放在一起考虑,对于一只格子,显然国王只有两种放置情况。

考虑去掉一个白色格子的影响,是钦定对应的一只格子只能放在 左上/右下,然后会带来一个二维区间的钦定影响,这个区间一定包含 \((1,1)\) 或者 \((n,m)\),现在就是要查询钦定有没有冲突。数据结构维护即可,这里使用了树状数组维护一个对应 \(y\) 的最大的区间长度,需要支持一个单点取 max 和前缀查询 max。


link [tag: 构造]

首先考虑最终单点询问次数 \(c_i\),必然要满足 \(c_i\) 是奇数,\(k|\sum{c_i}\),此时操作次数为 \(d=\frac{\sum{c_i}}{k}\),还需要满足 \(\max\{c_i\}\leq d\)

那么我们要小化 \(\max\{c_i\}\),那么可以先钦定 \(c_i=1\) 然后做单点 \(+2\) 的操作直到合法,这个顺次操作直接按轮次做好像没什么非常非议......?

然后直接开堆每轮消除 \(k\)\(a_i\) 最大的即可,然后还有一个无解,我们应该有 \(2|dk-n\),分讨一下,如果 \(k\) 为奇数,前面可奇可偶,如果 \(k\) 为偶数,前面只能为偶数,因此 \(n\) 并非奇数。


link [tag: 状压,网络流 hall]

考虑一个人 navie 的二分+网络流建图,然后过不了,考虑将 \(k\) 拆开成点,变成了询问是否存在完美匹配。

Hall 定理:存在完美匹配的二分图一边的任意点集 \(S\) 满足 \(|S|\leq|N(S)|\)

然后需要考虑左部的点集为 \(i\) 时右边所联结的点数,这个相同的人的点压在一起所以是 \(2^n\) 个状态。顺便处理出 \(st_i\) 表示第 \(i\) 天所对的匹配点。

然后我们发现这个邻域不好做,因为难以合并,正难则反,考虑求一个更强力的东西,只在这个点集 \(i\) 里面有边的点数 \(f_i\),考虑一个天 \(x\) 只在哪些 \(i\) 里面有贡献,显然是 \(i\)\(st_x\) 的母集,高维前缀和可求 >w<

然后集合 \(i\) 的领域大小就是,「总点数」-「\(i\) 的补集的 \(f\) 」这样一个东西。


link [tag: 哈希,xor,主席树]

强制在线,不难想到主席树,比较朴素的想法是做一个权值主席树维护每个位置(指值域上的位置)每个时刻的出现次数,然后询问就询问最大的区间 \([1,x]\) 满足 \(i\in[1,x],2|cnt_i[r]-cnt_i[l-1]\)

然后发现这个东西不太能直接合并......?考虑 xor 运算,正好奇数次有值,对于一个位置区间 \([1,x]\) 满足寄掉的条件就是所有的 xor 为 zero,考虑随机赋权 xor 哈希。此时如果区间没有出现奇数次的,xor 为 zero,如果有出现奇数次的,因为 hash 值不一样,极大概率 xor 消不掉。然后就做完了 >w<


link [tag:贪心,xor]

首先这个路径 xor 显然可以直接换成 根->点 的 xor,然后就变成了考虑很多限制条件 \((a_i,a_j,v)\),最小化结果不难想到按位贪心考虑。

对于每一位考虑在图上的情况,那么边为 0/1 ,意义是相同或者不相同,那么对于一个联通块,如果钦定一个点权,那么所有的都确定了。不合法其实就是二分图染色不合法了。

我们先随便钦定,然后会得到一个异或结果,但是我们考虑不同的钦定可能会导致结果更好,那我们考虑改变一个联通块的钦定所带来的影响。对于一个点,显然是奇数度数有印象,如果联通块的奇度点为奇数个,那么就是可以改变的捏。


P1667

煞笔题。考虑前缀和,发现其实就是交换两个位置,然后考虑置换换即可。


P6961

不难想到钦定边权付费至少为 \(x\) 再去考虑,这个可以枚举。

图论的话,考虑固定的代价 \(kx\),那么对于所有的至少为 \(x\) 的边,新图上的新代价就是 \(v-x\),这样进行一个最短路的跑。

分类讨论一下容易发现怎么跑都大于等于 jury ans,于是乎......?


CF1615F

考虑对奇数位翻转,问题变成交换两个相邻哒。然后有一个小套路,就是你本来要算位置的 \(\sum |x_i-y_i|\) 嘛,其实可以算前缀和的 \(\sum |a_i-b_i|\),然后就可以 dp 不放设 \(pre[i][j]\) 表示前 \(i\) 位时候 \(a_i-b_i=j\) 的方案数,\(suf[i][j]\) 是后缀的这个,那么答案就是 \(\sum pre[i][j]\times suf[i+1][-j]\times |j|\)


CF1916F

不放令 \(T=N-S\),考虑初始钦定一个 \(x\in S\),做下面过程 \(n_1-1\) 次。

  • 删去 \(S\),在 \(T\) 的导出子图跑点双,然后在 \(T\) 中随意选择一个非割点的点加入 \(S\)

如果能一直跑下去那么正确性显然,现在考虑会不会出现一个情况不能取到非割点的点。

考虑 \(T\) 中的点双,首先每个割点 \(y\) 必须与 \(S\) 有连边,不然的话原图不是点双。点双是一个树状物(圆方树),观察树状物肯定拥有的叶子节点,这个叶子节点中,去掉了 \(y\)\(S\) 应该是没有连边的,不然不是割,然后发现 \(y\) 很彻底的变成了一个原图的割点,不符合点双。


CF734F

经典结论 a&b+a|b=a+b,然后直接做就行了。

验证的话可以直接按位考虑和。


CF1043F

这个做法还算有意思。埃氏筛复杂度,优美。

首先一个数的质因子数量不会太多,可以证明答案上界只有 7。

可以考虑求一个 \(f[i]\) 表示选择 \(i\) 个数,\(\gcd\)\(1\) 的方案数,我们取模防爆,如果方案数算出来为 \(0\) 那么极大概率是没有办法做到的,前面一维特别特别小,我们分别做。

比如说考虑选 \(d\) 个数 \(\gcd\) 为 1 的方案数,考虑直接容斥,可以算成 \(f[d]=\sum C_{cnt_i}^d\times \mu(i)\),其中 \(cnt_i\) 表示 \(i\) 的倍数的个数。


CF1305F

首先感觉 \(\gcd\{a'\}=d=2\) 的答案不会很大,所以有一个浅浅的上界 \(n\),这意味着操作次数 \(>1\) 的最多有一半,那么最少有一半的数并 没有被操作 / 操作 1 次 / 操作 -1 次,这意味着随便挑一个数大概率是这种。

考虑这个 \(d\)\(a_i'\) 的关系,显然有 \(d|a_i'\) 对叭 qwq

所以我们有一个粗浅的想法每次随机一个 \(i\),贪心的求 \(d|(a_i+0/-1/1)\) 的答案,然后发现这样子仍然过不了。但是对于 \(d|d'\) ,这个 \(d'\) 就显得很没用了,所以可以直接筛质因数去跑。


CF505E

首先有一个显然的二分,判定能不能最终所有的高度 \(h_i'\leq H\)

我们还是要考虑一下过程:

|--------------h---|---|---|---|
       |-H-----|-------|-------|

不难发现这个很难做,我们考虑倒着做,不妨初始令所有高度为 \(H\),然后每天会减小 \(a_i\),可以拔高 \(p\),在过程中不出现 \(a_i<0\) 的情况下,这样子要求最终高度 \(h_i\leq h_i'\),相当于把 \(H\) 左边那一点往右边推了。

可以考虑贪心,每次考虑拿出最快要 \(a_i<0\) 的拔高即可。


CF1626F

首先期望是假的,原柿求的是所有情况的 \(b_i\) 之和。

\(f[i][j]\) 表示做了 \(i\) 轮之后所有的情况下 \(j\) 有多少个,这样最终的答案就是 \(\sum f[i][j]\times n^{k-i}\) 啦。

然后题目有个取模,我们考虑对值域取模,令 \(t\gets lcm\{i\}\),这个 \(t\) 上界不是很大(到 \(k-1\)\(lcm\))然后 \(f[i][j]\) 表示第 \(i\)\(b_i\mod t=j\) 的方案数。

转移显然有 \(f[i][j]\gets f[i-1][j]\times (n-1),f[i][j-j\mod i]\gets f[i-1][j]\)

然后真实值又被扔掉了。 粗浅的看,感觉每一轮 \(j\) 的和都变成了 \(nj\),大概是一个 \(n\) 的倍增,我们考虑算出每一轮的和,先令 \(sum\gets sum\times n\),再考虑第二种转移对 \(sum\) 的影响。

贡献是 \(j-j\mod i\),这个直接用方案数套进去就行了......?


CF1615E

理论上这个题目可以 wqs 二分套进去然后 dfn 序列做 dp 里面有一个决策单调性可以强行二分二分 dp 做掉这个数据结构题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。

首先分析一下先手的操作,一个点点掉实际上占掉了子树还有到跟的路径,那么显然叶子节点具有优先权。贪心地说,我们肯定先做叶子。

如果 \(lev\leq k\),可以占用整个树,那么直接随便的最大化即可,枚举 \(i\in[lev,k]\),求出最大的 \(i\times (n-i)\)。之后我们讨论别的情况 >w<

不考虑 \(w\) 的话,比较显然的想法是最大化 \(l\) 和占用部分 \(ans\),然后再最大化 \(r\),然后我们发现最大化 \(l,ans\) 肯定是没问题的,如果我们不最大化的话,有两种影响,这里不被占用的白指的是可以给后手肆意玩弄的点:

  • 被占用的白 变成 不被占用的白:显然对于后手不会更劣

  • 红点变成 变成 不被占用的白:后手肯定可以选择染色这样子 \(w\) 不变前面减小

所以我们先求一个选择 \(k\) 个叶子节点,考虑路径并最大是多少。

我们对于叶子节点按照 dfn 建立线段树,每次查询到根路径中未被占用的点数最大的点 \(u\),加入 \(u\) 的贡献,把 \(u\) 的贡献设为 \(-inf\) 来删除,从 \(u\) 往上遍历,对于未占用的点,占用祂,对其子树做一个 \(-1\) 操作来清除祂的贡献即可,这是一个区间修改的线段树。

这个贪心不是很显然,需要证明。假设一个最优方案不包含 \(u\),取跟祂最近的 \(v\),把 \(u\) 换成 \(v\) 答案不会更差。

先手一定了,考虑后手,可以选择染色的个数范围 \(i\in[0,n-ans]\),取一个最小的 \((k-i)(n-k-i)\) 即可......?


CF468C

构造题真的创人 /shui

考虑一个 \(f(i+10^{18})=f(i)+1\),然后 \(f(10^{18}-1)=81\times 10^{18}\) 是好求的,一堆 \(9\) 任意拼凑。

首先令 \(p\equiv f(10^{18}-1)\pmod a\)

\[\sum_{i=1}^{10^{18}-1} f(i)=p\pmod a \]

\[\sum_{i=1}^{10^{18}} f(i)=p+1\pmod a \]

不断把最低位换出去,得到

\[\sum_{i=t}^{10^{18}+t-1}f(i)\equiv p+t\pmod a \]

然后就直接

\[\sum_{i=a-p}^{10^{18}-a-p-1} f(i)=p+a-p\pmod a \]


P3590

仙题。

一个结论:答案区间至少有一个端点在 \(1,2,3,n-2,n-1,n\) 之一的位置,于是可以暴力去扫着做。

考虑证明,可以说明对于任意合法区间,如果左右都有至少 \(3\) 个字符,那么肯定可以拓展。

考虑一个合法区间 \(S\),以及序列 ***S***,如果 \(S\) 只有一个字符,那么显然可以随便拓展。

现在考虑两个字符,不妨设字符 ABC 出现次数为 \(a>b>c\),然后考虑能不能构造出不合法的情况。

  • 左右放 A, 显然可拓展,不这样构造

  • 左边放 B,不可拓展当且仅当 \(a=b+1\),所以如果右边放 B 那么可以取到 \(b>a\),那么右边一定放 C,我们考虑形如 **BSC**,为了右边不能被拓展必须有 \(c+1=b\),那么 ABC 出现次数为 \(x+1,x,x-1\)

*XBSC**,X 处只能放 C(A 会 ABC 一起然后合法,B 会 B 超过 A 但是 C 不变)。

XCBSC**,X 处还是只能放 C(A 会 ABC 一起然后合法,B 会 B 超过 A 但是 C 变成 x)。

CCBSCX*,X 处 ABC 都放不了(撒花。

  • 左边放 C,右边可以放 BC,我们剩下 CC 的情况分讨,首先有 \(c+1=b\)

*XCSC**,X 处不能放 C(C 超过 A 别的不变),不能放 A(C 等于 A 之后 A 再超过 C),只能放 B。

同理可得只能摆 *BCSCBX,然后 X 又是 ABC 都不行了 qwq

所以......?暴力然后过了。


CF364B

首先有一个 greedy,每一轮尽量多选择。然后朴素的想法每一轮跑 01 背包然后取最大价值,但是这样子会 tle。

事实上 01 背包初始的时候跑一次就可以了,因为如果有选择出重叠的部分,完全可以选择去掉这部分来取得同样的收益。


CF95E

不同种类的不会超过 \(\sqrt n\) 种,然后直接优化多重背包即可。


CF1842H

随机 \(x_i\in [0,1]\),限制条件 \(x_i+x_j\leq 1\) / \(x_i+x_j\geq 1\)

后面那个我们可以考虑变形喵,不妨令 \(x_i\gets x_i-0.5\),然后就变成了:

随机 \(x_i\in [-0.5,0.5]\),限制条件 \(x_i+x_j\leq 0\) / \(x_i+x_j\geq 0\),好看多了是吧(

然后发现这个限制条件其实亦真亦假是由那个 绝对值 大的数决定的,不妨按顺序 dp。

在实数域上面随机,意思是差不多随机到两个相同连续的概率为 0,不用考虑啦,剩下的考虑一个排列的顺序就行了,考虑符号的话总情况数量是 \(2^n\times n!\)

\(f[j]\) 表示当前排列填了 \(1,...,BitCount(j)\) ,填的位置为 \(j\) 的方案数,然后我们考虑这个位置向外贡献,对于一个没有填的位置 \(i\)

我们考虑 \(st[][i]\) 对于填写 \(i\) 的影响:

  • 如果这个地方填 \(-i\),那么要满足 \(st[0][i]|j=j\),转移到 \(f[j|1<<i-1]\)

  • 如果这个地方填 \(+i\),那么要满足 \(st[1][i]|j=j\),转移到 \(f[j|1<<i-1]\)

然后就做完了,答案是 \(\frac{f[2^n-1]}{2^n\times n!}\) 啦 >w<

posted @ 2024-03-15 14:57  Hypoxia571  阅读(19)  评论(0)    收藏  举报