SD2026 三轮省集

随机原因下又能来三轮了,那我二轮最后不白 recall 了()

\(\text{day0}\)

前一天又失眠了,早上起来直接收拾东西赶高铁,下午四点多到了青岛,哎打车怎么要了四十块钱,黑心司机啊。

看到地图上显示到 cyyz 只有 \(2.2\) 公里,徒步走了一会,发现显然不止 \(2.2\) 公里,过了半个多小时才到,签了到之后上楼配了下电脑坐公交回酒店吃外卖。

试机赛怎么典完了,T1 怎么 \(n\le 11,\bmod 10^9+7\),这我哪会啊,T2 送了 \(65\),然后咋办,\(O(nm\sqrt {nm}\log nm)\) 有机会过 \(nm \le 3\times 10^5\) 吗,没什么前途啊,这我哪会啊,T3 怎么是解解概率方程,这我哪会啊。

T1 还真是哈集幂,怎么过了一万个人,T2 怎么是按照 \(2\times 2\) 正方形刻画,哦好有道理,这题好玩唉,T3 忘了。

半夜又失眠了。

\(\text{day1}\)

70 + 0 + 0 = 70

没睡醒。

这 T1 是啥,暴力给了 \(50\) 吗,T2 \(n^2\) 怎么才 \(20\) 分,哎是不是根号分治一下就单根号或者挂个 \(\log\) 了,这真能跑过 \(10^5\) 吗,我靠怎么才 \(35\),T3 怎么是网络流,这我哪会啊。

奥奥 T1 稍微拆一下卡一卡常暴力就 \(70\) 了,然后呢,不会啊。T2 更没前途了吧,我靠 T1 怎么过了一车,开始嗯推。

嗯推了一两个小时,感觉暴力拉插就大概是对的,写了一个多小时调出来了,哎怎么还是 \(70\),哎怎么 \(T=1000\) 跑了 65s??哦好像是 \(O(T\log^4 n)\) 的,死完了啊,不是我 T2 还没写呢。

趁早退役吧。

T1

拉插好像没什么前途,研究了半天也没什么优化的好办法。

考虑组合意义,\(g(n) = g(n-1) + g(\lfloor \frac{n}{2}\rfloor)\) 等价于 \(2n\)\(2\) 整数次幂的拆分数,考虑对于 \(2^j\),其有 \(j+1\) 种本质不同的拆法,其他的都可以进一步转化由其他的数到。

然后设 \(f_{i,j}\) 表示用 \(2^x(x \ge i)\) 拼出 \(j\times 2^i\) 的方案,套个组合数转移就行了,复杂度 \(O(T\log^3 n)\)

组合意义牛完了,gemini 有点牛的。

\(\text{Submission}\)

T2

好题,链接挂的是弱化版。

考虑维护一个二元组,当前拼了多少链和剩余长度,暴力容易做到 \(O(n^2)\),然后根号分治一下,对小的暴力,大的发现只有 \(O(\sqrt n)\) 个本质不同的答案,二分找区间即可,复杂度平衡一下可以得到 \(O(n\sqrt{n\log n})\)

\(\text{Submission}\)

然后我们需要把根号扔掉,考虑类似长剖,每次继承重儿子的信息,然后暴力合并轻儿子,但是这里需要具体讨论一下:

\(K\) 为所有轻儿子的最大 \(siz\)\(d_i\)\(i\) 到叶子的最长链,\(f_{i,l}\) 表示 \(i\) 点拼了 \(f_{i,l}\) 条长度不小于 \(l\) 的链,\(g_{i,l}\) 表示 \(f_{i,l}\) 条件下最大的剩余链长。

对于 \(l > K\),显然此时 \(f_{i,l} = 0,g_{i,l} = d_i\),因为子树内的最长链长度不超过子树大小。

进一步,根据 dsu on tree 的结论,所有轻儿子子树大小和为 \(O(n\log n)\),本题中,所有点的答案和为 \(\sum \frac{n}{i} = O(n\ln n)\),因此我们只要暴力对 \(l \le K\) 的部分合并,对 \(l > K\) 的部分暴力更新每个点答案。

写一点实现细节,我们可以对每一条重链开线段树,其大小为 \(siz_{top}\),避免了线段树合并。先用每个 \(d_i\) 更新对应的 \(g_{i,l}\),然后将每个轻儿子所在链的线段树信息暴力取出来更新 \(g_{i,l}\),顺带删掉就行了。

最后找到 \(l > K\) 的部分,用轻儿子最大距离 \(D\) 和每个区间判断是否存在合法链,存在的话继续递归直到叶子暴力修改,否则区间加一区间取 \(\max\) 就行了,注意叶子节点有一些细节。

复杂度 \(O(n\log^2 n)\),细节挺多的。

\(\text{Submission}\)

T3

原始对偶,互补松弛定理。

\(\text{day2}\)

100 + 75 + 20 = 195

小赢了一下,还是好困。

哎这个 T1 感觉很熟悉啊,好像去年三轮的题,链上维护一次函数什么的吗。我去 apple 怎么一分钟过了,那应该就是原了,遍历了一下找到原题,重新品味了一遍,感觉我很懂了,2h 写完。

T3 怎么好像也见过,但是忘了咋做了,这咋多项式,奥奥直接 dp,但是好麻烦啊,拼个暴力跳了。T2 \(O(n^2)\) 怎么过了 \(55\),最优化没有多测吗,那我就要开始乱搞了,随机糊了个反悔贪心,然而好像并没有什么反悔贪心的样子,确实有点不懂这种东西,然后开始打补丁,猜了个很对的合并策略就开始对拍,速度大概是每半小时多过 5 分,最后拿了 \(75\),发现打不动了,好像是做法有本质问题,后来发现是反悔贪心写错了/jk

最后写力竭了,感觉时间不够拼完 T3 的暴力 dp,然后开始尝试输出各种东西,最后发现输出大样例可以通过 20 分,遗憾离场。

T1

链接是弱化版。

考虑一条链且起点在一端的情况,并且维护每个点的最晚通行时间,显然这东西需要拉到平面上,一个斜率为 \(1\) 的直线拼上一个竖直的线段,然后之后的折线都需要在它上面跑,可以看做先平移再在后面加折线,所以拿个平衡树做区间平移加点就行了,复杂度 \(O(n\log n)\)

推广到一般情况,其实做一下树剖就行了,每次先递归到父链修改再一个一个操作下来,实现还有一点细节,比如父链信息继承时也需要保证做了区间平移,所以要在开头和结尾都加点,复杂度 \(O(n\log^2 n)\)

\(\text{Submission}\)

T2

唉原来正解真是直接贪吗,讲课没听懂咋办。

学习题解做法,先考虑变成选择半价值最大的集合,按值域扫,记当前买的数的数量为 \(n\),之前半价了 \(k\) 个,那么显然还有 \(n-2k\) 个未匹配且是全价买的,显然先把这一轮能匹配的都匹配了一定是优的。

然后考虑一个之前半价的数 \(k\),当前正在决策的数是 \(s\),分类讨论:

  1. \(k < s\),此时肯定是把 \(k\) 全价买了然后半价买两个 \(s\),此时如果 \(s\) 不够了就不管了。

  2. \(k > s\) 此时是可以保留这个半价的 \(k\) 的,于是我们加入一个反悔决策 \(2s-k\),如果选了 \(2s-k\) 那么就是全价 \(k\) 换两个 \(s\),如果选了 \(k\) 就是不换继续半价 \(k\),如果两个都选了那么就是用别的换了两个半价 \(s\)

这样就覆盖了所有决策,拿个堆维护一下最小值即可,复杂度 \(O(n\log n)\)

\(\text{Submission}\)

T3

很牛的题,感觉难点在第一步的转化。

考虑我们计数的难点在于 \(c\) 中未被吃的寿司可能对 \(a,b\) 的选择造成影响,于是我们只对吃的寿司方案计数,然后尝试插数来得到原本的 \(c\)

具体地,只取出 \(a,b,c\) 的关键点序列 \(\{a'\},\{b'\},\{c'\}\),即三人选择吃的寿司,假设一种合法的 \(\{c'\}\) 已经被确定了,那么它还可以插数得到原来的 \(\{c\}\),但是这个方案显然不能直接组合数算,因为有 \(a,b\) 的限制,但是因为这里跟 \(c\) 内部的具体值关系并不大,所以系数应该也和原序列无关。

考虑最后一次吃的寿司 \(x,y,z\)\(z\)\(c\) 序列中,显然 \(x,y\) 应该排在 \(z\) 的后面,那么就有两种方法,\(zxy\) 或者 \(zyx\)。然后再看第二步,\(e,f,g\),其中 \(g\)\(c\) 序列中,那么就是 \(e,f\) 需要排在 \(g\) 后面。将两步合起来看,假设我们已经放置了 \(x,y,z,g\),那么 \(e,f\) 需要插空放置,方案即 \(4 \times 5 = 20\) 种,这里类似于连续段 dp。

可以发现这里的系数和原序列就无关了,系数即 \(\prod \limits_{i=1}^n (3i-2)(3i-1)\)

也就是说,我们此时只需要对 \(\{c'\}\) 计数,就可以乘系数得到原本的 \(\{c\}\) 的方案。

于是,我们只需要按照有序的 \(c\) 来 dp 就好了,这就简单很多了,考虑设 \(f_{i,j,k}\) 表示匹配了 \(i\) 轮,\(a\) 序列匹配到 \(j\)\(b\) 序列匹配到 \(k\) 的方案数,匹配过程中满足如下几个性质:

  1. \(a_j\)\(b_k\) 之前没在 \(a,b\) 中出现过
  2. \(c\) 插入的关键点不能和 \(a,b\) 中出现过的数重复。

第一条限制预处理一下就行了,第二条限制具体地是对转移系数的限制,即我们有 \((3i - |\{a_1,a_2,\dots,a_j\} \cup \{b_1,b_2,\dots,b_k\}|)\) 转移方案,这个显然也可以预处理,然后前缀和优化一下就是 \(O(n^3)\) 的了。

\(\text{Submission}\)

讲课还是掉线,等我啥时候学一下图计数吧。

\(\text{day3}\)

睡着了,神一天鬼一一一一一一天。

T1 感觉有点怪啊,第一感觉没什么想法,看了 T2,T3,理解了半天 T2 题意,发现需要构造个什么可以计数的结构,想了半天无果,发现 T3 暴力只有 12 分,回头写 T1。

奥答案关于选的中位数上凸,要分类大小边,一种边多了另一种边可能选不了,这不是我们最小限度生成树吗??但是场上忘记了 wqs 这种东西,编了一整场的贪心死掉了,最后把 T3 暴力拼上了。

休息一天,看比赛睡觉。

T1

T2

T3

下午讲的这么困难吗,感觉每个都是 D2T3 左右的东西。

P9061

哎我终于懂了一个。

发现这个 \(\text{2-side}\) 矩形的性质很棒,对于所有操作过的点,一定是一条左上到右下的折线,这是很好维护的,按照二元组 \((x,y)\) 维护即可,拿个平衡树支持动态插点。

然后我们只需要处理没操作过的点,考虑找到每个点被加入折线的时间 \(t_i\),令当前时间为 \(k\),那么就是一个三维偏序 \(k < t_i,x_i \le X,y_i \le Y\),复杂度 \(O(n\log^2 n)\)

我们注意到一种二项式反演做高维偏序的方法,考虑容斥,我们只需要做 \(k < t_i,x_i \le X\)\(k < t_i,y_i \le Y\),减去 \(k < t_i,x_i > X,y_i > Y\)。注意到最后一个三维偏序是假的,如果 \((X,Y)\) 在折线内显然答案是 \(0\),那么 \(x_i > X,y_i > Y\) 时就一定有 \(k < t_i\),因此这也是个二维偏序,复杂度 \(O(n\log n)\)

trick 是对偏序问题的容斥转化。

这题好像挺卡常,等我写一发。

qoj14685 P6580 P7898 uoj814 P14463 uoj892 好像是倒序排的(?

\(\text{day4}\)

太便宜的外卖不要买啊。

100 + 25 + 36 = 151

但是 T1 最后没交上,火大,这个评测队列为啥这么长啊。

开场若干分钟后才把 down 下下来,发现 T1 构造,T2 ds,T3 数数,感觉构造有点难完了,T2 的性质好像也不是那么好写,于是先开 T3,编了一会 dp,把 \(O(nd)\) 的写了,发现下一档是矩阵快速幂,但是编的转移好像难以写作矩阵,而且只有 \(16\) 分,再下一档就不会了,所以回头看 T1。编了一万年,发现二元组如果有偏序关系的话那么可以直接配对,然后其他的用 \(k+1\) 次做完。写完只过了 \(n\) 奇数,然后修了一万年,写了个爆搜和拍子对拍,发现还可能是一段长偶数的置换环来回换就只需要 \(n\) 次了,然后还有一些 corner,比赛结束 \(1\) 分钟内调出来了,火大。

T1

答案肯定 \(\ge n\),然后能手玩出一种 \(k+1\) 的填法,但是最后要求一个升序一个降序,但是二元组升序的我们可以 \(2\) 次做掉,所以 \(n+1\) 是有通解的。

拍了若干组之后,发现是 \(n\) 的填法的,考虑每次跳相当于在坐标轴先向左下跳一步,再向右上条一步,所以最后不会往回跳,也就是说,我们可以划分出一个极大的矩形,保证这里面的点可以一次全消耗掉,发现这个就是要求前 \(i\) 个数的最小值是 \(n-i+1\),然后同组内我们可以轮流跳两个数组的最大最小值,最后再把剩余数倒着消耗掉即可,具体有一点细节,因为题解是 d6 写的,所以我们有点忘了,但大概是这样。

\(\text{Submission}\)

T2

好像懂了,我不懂啊,有没有大神教教\ll

T3

我真能懂吗。

qoj10985 qoj2129 qoj5176 qoj7977 qoj9438 AT_npcapc_2024_d qoj6413 qoj17755 [https://qoj.ac/problem/17755] uoj682

\(\text{day5}\)

100 + 12 + 21 = 133

哎这 T1 是啥,跳了,啊这 T2 真能做吗,T3 怎么又是这种东西,感觉已经见过不下 5 个这种题了,但是为啥每个题做法都不一样

奥 T1 是正方体计数,随机枚举了几种枚举方式就得到了 \(O(n^4)\) 的做法,T2,T3 暴力打完之后开始决策做哪个,感觉 T3 没有什么感觉,开始写 T2,一直很犹豫不是很敢写,不知道在干啥,猜了只会用 \(2\) 条边,感觉能分析到 \(1\) 条边,但是感觉会有 corner 不敢猜,然后发现光一条边都要基环树直径,感觉很难写,开始不知道在干啥,随机编了个东西就写,调到比赛结束,我在干啥啊?发现编的那个东西完全没有正确性。

不要犹豫啊,分析到了很对的东西就开始写,不要怕细节多难写,仔细分析一下细节就要开始做啊,T2 没拿 64,T3 特殊性质没打都很可惜吧。

T1

枚举正方体四个点就只需要处理四个角了,复杂度 \(O(n^4)\)

\(\text{Submission}\)

T2

只会加一条边,基环树直径就有 \(64\) 分了。

然后什么点分之类的,我没懂啊,有没有大神教教\ll

T3

考虑找到每个点下一个完全独立的段,假如我们维护出来了可以 LCT 维护每次找到 \(\ge y\) 的位置。

具体的话维护可以上线段树,有点细节没懂,等我再看看。

下午是图联通相关理论,二分图博弈,网络流,这么论文吗。

P6658 P9105 P6914 P13955 AT_arc122_f P14885

\(\text{day6}\)

100 + 100 + 0 = 200

评测死了,变成交交原大战了。

早上睡过头了,晚 80min 进场,这 T1 是啥,感觉很难刻画啊,T2 是什么鬼,T3 是什么鬼,怎么还有博弈。

哦哦 T1 读错题了,那一定是上下上下这样的若干段,那么直接摁着 dp 就是 \(O(nV)\) 的,发现好像最终状态只跟相邻数有关,而且差的不大,大胆猜一下把所有 \(a_i-1,a_i,a_i+1\) 扔进来,然后过了 \(n^2\) 的点,然后继续猜,试了下 \(a_i-k,a_i,a_i+k\),发现不是很优,然后只保留相邻 \(10\) 个位置的数好像就过了?不是很懂。

发现 T3 不是很会,转头梭哈 T2,发现前缀后缀是一个方向,不会很好做,考虑暴力 dp 的话就得同时刷表和填表,但是这样前后缀就独立了,然后只要看前缀怎么做就行了,扔到 trie 上,发现一定一段区间是可以转移的,但是怎么找到这个左端点,玉玉了半天,发现可以 SAM,但是这题肯定不是线性,那我就写二分哈希了,然后类似 replace,链上只会有根号种颜色,根号平衡一下,好像就做完了,激动开写,调到比赛结束前 20min 才写完,没时间打 T3 暴力了,小输。

哎我线下文件夹怎么忘记改名了,爆蛋了。

T1

考虑一定将最终态的连续段看做一个点,那么最后一定是上下上下上下的形态,设 \(f_{i,j,0/1}\) 表示第 \(i\) 个位置,数是 \(j\),当前是大的还是小的,就可以 \(O(nV)\) 了。

进一步地,猜测只有 \(a_i-1,a_i,a_i+1\) 是有用的,通过了 \(O(n^2)\),再猜一下只需要保留 \(i\) 前后有限位置个数就行了,因为每个数的取值与前后强相关,最后发现取前后四个就可以通过了。

不会证明。

\(\text{Submission}\)

T2

发现前缀和后缀是对称的,方向不同不好一块转移,需要分开做。

填字符串的过程应该不好再优化了,所以在 dp 过程中分别做前缀和后缀的转移,具体的,可以对后缀做填表,对前缀做刷表,这样显然不会遗漏两者的贡献。

如果我们能做前缀的转移了,那么转置一下就可以得到后缀的转移,所以首先对前缀考虑。

把 trie 建出来,根据 replace 的经验,对长度和有限制的话肯定有一些根号性质,进而能够猜测,如果我们将 trie 上每个点的代价的前缀 \(\min\) 看做颜色,那么以根为一段的链一定只有 \(O(\sqrt L)\) 种颜色。

发现 \(i\) 可以转移到的是以 \(i+1\) 为一段的一个区间,具体地就是能走的 trie 上的最大深度,我们是可以找到这个最大右端点的,二分哈希记录每个前缀在 trie 上的对应位置的哈希值即可。

然后我们就找到了可以转移的这条链,具体的就是 \(f_{i+dep_j} \gets f_i + a_j\)\(a_j\) 是 trie 上走到 \(j\) 节点的代价,发现这东西形如若干段区间 \(\text{chkmn}\),单点查询,但是由于链上每个的代价是单调不降的,所以变成前缀 \(\text{chkmn}\),可以根号平衡,做 \(O(1)\) 修改 \(O(\sqrt m)\) 查询,那么总复杂度 \(O(m\sqrt m)\)

后缀的转移其实是比前缀更简单的,类似上面的做法,我们只需要找到这条链每个区间 \(f_{i-dep_j} + a_j\)\(\min\),区间 RMQ 即可,注意这里的 ST 表需要支持动态加点,所以 \(st_{i,j}\) 的意义是 \(i\) 位置向前 \(2^j\) 的最小值,当然会有一些边界问题,但都是简单的。

记得写双哈希,单哈希连大样例都过不了,略微卡常,总复杂度 \(O(m\sqrt m)\)

\(\text{Submission}\)

T3

我没懂啊,有没有大神教教/ll

下午讲了很多 trick 啊,虽然听到一半掉线了。

P11622

考虑离线,将询问在 \(l\) 处加入,在 \(r\) 处查询,每个位置只需要维护一个集合的权值即可。

分段,\([1,x]\) 整体平移到 \(x\)\([x,2x]\) 不变,\([2x,\infty)\) 需要整体减 \(x\),可以平衡树,第三段带交合并即可,复杂度 \(O(q\log^2 n)\)

P11810

Trick:平面图转对偶图

研究了半天,脑子一点不转说是。

网格图是平面图,刻画连通性可以考虑平面图上的关系,两个点在原图中联通等价于平面图中两人在同一个面内(我们称最外面的面为无限面,也是要连成一个环的),删除一个点等价于在平面图内加入四条边。

考虑在平面内,判定一个点是否在一个环内,等价于其引出一条射线,射线与该环的交点为奇数个,因此,考虑异或哈希。

上面说的判定方法在计算几何中有一个唯一弊端是他可能碰到共线的直线,但是显然,在网格图上不存在共线,我们令每个点向右引出射线,那么只需要对环上的每条竖线维护其右侧的点的哈希值即可。

具体地,我们用并查集维护边的连通性以及每个点到根的权值异或和,当加入一条边成环时,就可以算出整个环的哈希值了。

对于一个环,要么其内部有全部的点,要不其内部没有点,所以异或值要么为全集要么为空集,这样就可以解决没有 \(2\) 操作的情况了。

再考虑操作 \(2\),左右平移是简单的,我们只需要改一条线的哈希值,而对于上下移动,显然我们不能更改所有竖线的哈希值,考虑给横线也赋一个哈希值,表示移动带来的变化量,那么,我们就需要维护整个环每条边的哈希值了,这个是一样的。

因为需要支持撤销,所以并查集启发式合并,复杂度 \(O(q\log nm)\)

\(\text{Submission}\)

P11692 P12083 CF1336E2 P6256 qoj10036

\(\text{day7}\)

100 + 0 + 0 = 100

怎么就 d7 了。。。。三轮过的好快啊。

依旧起晚了,进场发现 T1 没过几个人,后两题无人得分,这真吓哭了,读了一下三个题,发现 T2 好像在某个科普视频见过,巴巴博弈也来了,T3 完全不懂,开始梭哈 T1。

发现就是一个纯构造,开始随机编一些东西,发现这个操作可以用和来刻画,然后一次操作只会改前缀和,然后又想了半天,发现一个段内的代价如果为 \(0\) 那么他是独立的,可以在段内操作,变成了若干代价不为 \(0\) 的子问题,猜测答案不超过 \(n\),编了一万年有没有良好的构造,发现真的有,那么答案只可能还有 \(n-1\) 了,怎么 check 呢,又编了一万年,讨论了好几种情况,在比赛结束前 30min 调完了。

这 T1 怎么还过了这么多人啊我靠??

T1

感觉说的差不多了,剩下的看 sol 吧。

\(\text{Submission}\)

T2

牛完了。

随机看一些科普视频,可以发现完全图时如果有 \(k\) 个蓝眼睛,那么他们会在第 \(k\) 天全部死掉,因此答案为 \(\sum i\binom{n}{i}\),获得 \(0\) 分()。

进一步考虑,我们需要得到一个存在正确性的做法,首先肯定要枚举蓝眼睛集合 \(S\),设 \(f_S\) 表示集合内人为蓝眼睛自杀的时间,一个患病的人首先肯定假设自己没病,那么他应该在 \(\max f_S\) 的时间内发现有人死了,如果没看见,那么他就会意识到自己是蓝眼睛,然后在 \(\max f_S + 1\)死掉。

那么,对于一个蓝眼睛集合 \(S\),其 \(f_S\) 一定是其中所有人死掉时间的 \(\min\),我们枚举每个蓝眼睛的人,然后跑出他死掉的时间即可,对于一个人不知道的人,我们不知道他们的状态是什么,所以要枚举一个子集转移,具体可以记搜,显然如果转移出现了环那么有限时间内不会结束,不存在答案,复杂度 \(O(4^nn)\),获得 \(20\) 分。

进一步地,题解说可以打表,发现对于 \(S \subseteq T\),一定有 \(f_S \le f_T\),所以对于不知道的人我们假设他们全是蓝眼睛就好了,具体为什么有这个结论后面会说,复杂度 \(O(2^nn)\),获得 \(50\) 分。

然后我们考虑一下多项式的做法,考虑上面的暴力做法,发现对于已经确定的蓝眼睛集合和点 \(u\) 的邻域有交的部分是不用动的,因为他们的状态显然不用变,唯一难做决策的是 \(u\) 不知道的人,所以我们考虑建出反图!(这步真脑电波吧)

刚才在暴力做法中,不是可能出现环吗,对应的就是反图中的环,所以我们把所有 scc 删掉即可,然后对着剩下的 \(\text{DAG}\) 考虑,一个人假设自己不是蓝眼睛的过程,就是将图上一个黑点变白,然后把其邻域的某个子集变黑,那么最晚死掉的时间就是图中变成过黑点的最大点数,因为肯定存在一种方式每个点只被变成过一次黑,然后一次一次向下递归,每个点都会被数到,所以最大黑点个数 \(k\) 就是最晚死掉的时间。

原题解中给了做法的对照,前面每个人最晚死掉的时间就是最大黑点个数,枚举每个人找到其不知道的人的子集就是反图的邻域子集,\(f_S\) 的值就是最早开枪时间对应每个点被重复染黑不重复计数。

那么能够发现最大黑点个数随初始黑点个数增加而不降,所以每次将邻域全部染黑即可,那么就只与 \(\text{DAG}\) 可达性相关了,记能够到达一个点的点数为 \(k\),那么对两问分别讨论:

  1. 考虑一个点的贡献就是他是否会被染色,那么我们只需要让其可以被染色,其余任选即可,贡献方案为 \((2^k - 1)2^{n-k}\)

  2. 还是考虑一个点的贡献,在一个确定的集合 \(S\) 下,假如我们删掉 \(S\) 中不影响最终染色的点,剩下的每个点都可以成为最小值的取值点,这里可以稍微参考一下 \(50\) 分的 代码实现,那么对于其中一个点,就只需要要求可以到达他的点不存在被染色的,其余任选,贡献方案为 \(2^{n-k}\)

然后我们就讨论完了,用 \(\text{DAG}\) 可达性可以做到 \(O(\frac{n^3}{w})\)

\(\text{Submission}\)

T3

不会啊。

下午是构造专题,等着把第一个题做了吧。

CF1646F CF1508D CF1053E CF1168E qoj10429

\(\text{day8}\)

做了一万年 T1,完全不会任何容斥技巧,编不出可以不用容斥的做法,然后打了暴力离场,T3 拼了半天暴力,发现 \(O(2^nn)\) 可以过 \(n \le 25\),T2 最后数组开小了暴力没写完。

唐成啥了,昨天晚上又没怎么睡,早上起来还一直在肚子疼,力竭了。

T1

其实是可以容斥掉一个联通块内重复的方案的,具体来说,这个技巧叫做点减边容斥。。。

T2

T3

posted @ 2026-06-18 00:15  Wei_Han  阅读(29)  评论(0)    收藏  举报