2023.8 做题笔记 / 不自量力的妄想 镌刻在心脏

不愿忘却。

早知如此绊人心,当初何必相识。

记录了好玩的题目,代码都很好写(


[ARC092F] Two Faced Edges tag:tarjan,dfs

che 的题解。

tarjan 之后按在不在 scc 上面分讨边,发现要求不含 (u,v) 的路径是否存在。想办法算路径长度 >1,裸 dfs 算路径是搜索树一条边。正反 dfs 一定有一个可以算出如果存在的合法路径。


[CF348C] Subset Sums tag:根号分治

根号分治。将集合按照跟 t=n 的大小关系分为 轻|重 集合,因为 ni 范围确立,这么干有两个好处,重集合最多有根号个,轻集合长度不超过根号。对于轻集合,直接暴力处理,对于重集合,我们打上标记。然后会发现诶这个重集合贡献需要加到别的里面,那我们预处理每个集合跟每个重集合的公共部分大小就可以了喵。

具体而言,预处理重集合和每个集合的交集大小。

  • 重集合修改:打上修改标记。

  • 轻集合修改:在原序列暴力修改。

  • 重集合查询:提前算好的 sum 加上跟重集合的贡献。

  • 轻集合查询:暴力算 sum 然后加上跟重集合的贡献。

upt: 其实只要暴力算重集合与任意集合的交,然后轻集合的贡献暴力算,重集合的贡献打上 tag,每次询问就是已经被打好的轻集合贡献 + 遍历的重集合贡献。


[AGC011C] Squared Graph tag:二分图

原图乘出来非常非常非常非常抽象,考虑 (a,b)(c,d) 联通的情况,那是一个在原图上同时游走任意久的游戏 ,所以其实 ac,bd 有奇偶性相同的路径即可。对于原本的一个联通块,有奇环显然随便玩,不然就得二分图裂开,特殊的孤立点也是一种情况。原连通块独立的都是独立的直接考虑贡献,这样计算各种东西的数量就能算出贡献了。


[CF741C] Arpa’s overnight party and Mehrdad’s silent entering tag:二分图,构造

upt:我们用互不相同作为条件建图,那么有解和构造做一次二分图就行了。注意到单点度数一定不会超过 3,但是 3 没有什么好性质,我们不妨直接钦定成 2 的话就是链 / 环,然后环里面一个人一定有 cp 肯定就是二分图了,那么我们钦定相邻两个不相同即可。

考虑配对显得非常难做,构造题做起来要猛一点,就像原神玩家一样!直接间歇性强制配对,然后发现肯定是有解。二分图染色?启动!


P3573 [POI2014] RAJ-Rally tag:拓扑排序,堆

首先去掉某个点肯定要修改合并信息这样子,这是个 DAG 那么可以想到预处理 fi,gi 表示正/反图最短路,然后对于一个 i,成为答案应该是某个合法的 fj/gj/(s,t),对于 (s,t) 这种不好处理的应该是隔开成为 (u,v)fu+gv+1 来贡献,按照二分图的类似网络流的割的形状,用堆来算贡献即可。


[CF442C] Artem and Array tag:贪心,构造

如果一个数比两边小,随便删,可以发现肯定不劣,然后最后就是一个数组的峰的单。此时我们希望删掉的数有两种性质:取到的答案最大,删掉之后不影响别的,发现最大值和次大值旁边更大的那一个满足这个条件,取能取到的第三大值,且不可能成为某个 min,最终的贡献就是前 n2 小的 ax 啦 qwq


[ARC072F] Dam tag:建模,凸包

f[i]=j 表示 i 的容量最多能拿到 j 的热量(温度乘体积),这是一个上突壳子的函数。明确一点我们加水是强制的捏,所以每一轮先把原本的加上一个向量,去掉多的地方,然后我们发现后面的放水可能会让前面的答案更好,所以每个点忘原点连一条线之后新的上突壳子即为新的 f 函数!

玩一个单调队列维护就可以啦,每次删掉斜率比后面小的点。有一种 跟我的可爱的 teriri 一样 可爱的做法,直接把每次加水的向量加到队列里面,不维护那种丑陋的东西也可以啦,每次就,如果斜率比不上就两个向量加起来!


[ABC191F] GCD or MIN tag:数论,枚举

che 的题解。

考虑各种弱化拼在一起就行了。这篇题解因为 latex 被打回多次,不开心捏。任意 gcd 可以枚举约数搞 gcd 判断合不合法,然后发现 min{ai} 是 gcd 合法的界限。


[ABC243G] Sqrt tag:dp,整除分块

fn=i=1nfi=i=1n(ni2+1)fi

事实上一直类似搞进去可以拥有很离谱的复杂度,但感觉没太大必要。


[ABC308G] Minimum Xor Pair Query tag:xor

把序列排序,xor 最小值肯定在 a[x]^a[x+1] 中出现过,感性理解就是 xor 是类似减法所以要求的是尽量接近,证明可以搞点交换。开俩 multiset 动态维护就可以了。


P9378 [THUPC 2023 决赛] 物理实验 tag:贪心

注意到权值有绝对的领先,我们考虑贪心的取。观察到如果一个集合可行,其选择没有影响可行性胡后效性,那么直接贪心(集合外的位置固定而数等价),维护选的数的集合 in[],如果能加入那就加入。再考虑怎么判断,维护 vis[i] 表示每个点有没有被做掉或者炸掉,碰到不要的直接就炸了,不然就一直用做掉这个实验的方式保护祂,如果保护不来就是不可以。


[AGC016D] XOR Replace tag:xor,贪心,基环树

a[1]^...^a[n-1]^a[n]=M,a[1]^...^a[n-1]^M=a[n] 所以可以当成在末尾多放一个 M 然后每次可以 swap(a[x],a[n+1])。对于一组 (ai,bi) 可以看做一个「放入 bi 得到 ai」 的游戏,自然而言想到建图于是得到变成了走到。

每个点出入度均为 1 的情况:如果没有重复值(指 ai=ajij)那这是一堆环,有重复值就是环打结,也不影响答案。每个环需要额外走一次,答案就是「边数+联通块个数」。如果 M 可以混入其中那就 -1。存在点 出|入 度不为 1 的情况:其实就是上面的情况一个环变成了一条链,我们会发现链跟点没啥区别,如果 M 出现在链上一定是底,不会有额外贡献。


[AGC004C] AND Grid tag:构造

前缀唯一绿题(划掉。

两个答案图与起来等于原图,并且分别四(上下左右的)联通。首先原图的部分肯定要 1 进去!剩下的一个位置要不然 A 有要不然 B 有要不然 AB 都没有。考虑到这是一个构造题,AB 都没有什么的肯定是人家不喜欢的啦。

所以我们想一种办法,恰好能把 A 联通,剩下的部分全部给 B 然后 B 也可以联通。这个就有很多办法啦,第一列给左,最后一列给右,其它奇数行给左偶数行给右,或者直接构造两个蛇型玩意儿也可以。大概思路就是,拿宽度为 2,两种颜色的笔刷从边上出发用合法的颜色覆盖整个图即可。


[ARC107D] Number of Multisets tag:dp

考虑下述方式来双射数集,末尾加入一个 1,整体 ×12,设 f[i][j] 表示有 i 个数和为 j 的方案数,那么转移显然是 f[i][j]=f[i1][j1]+f[i][2j]


[CF1270G] Subset with Zero Sum tag:基环树

化丑陋的 inaii1 为可爱的 1iain,然后我们连边 (i,iai),每个点一个出边这是一个内向基环树森林,一条边可以看成一个变化,若干次变化之后变成自己意思就是被 -0 了,上面的一个环就是一组解了。


[CF1364E] X-OR tag:交互,or,and

首先 (ap=0)|ai=ai,我们想要先找到 p 的位置然后花费 n1 次询问输出序列,寻找的这部分可以花费的次数是 2048(n1)=n+174 次。

先考 ai 好不好求,我们知道一些信息 ai|aj=vj,那么 aiandvj,容易发现取很多个之后 aiandvj 的概率非常低,对于某一位来说,只要存在 (aj)=0 就行了,随机取一次这个概率 12

我们知道 ai=x,如果 Q(i,j)=x 的话 ajai 的子集有可能成为答案但是不确定是不是 0,如果 Q(i,j)x 的话一定有位是 1 一定不是 0,注意到前面那一种情况顺着做只有 logV 次,出现之后直接随机化求出新的 ai=aj 即可。


P4334 [COI2007] Policija

第一种询问显然边双缩点成树然后树上倍增就可以做了,但是不知道点双怎么缩成树啊 /dk/dk。圆方树?启动!对于每一个点双新建一个点,每个点向所在点双的虚点上面连边就是可以的啦(原图中的边不要了)。对于边的询问,我们发现割边变成了一个虚点,于是乎也不需要再写一堆边双相关的东西了。

posted @   Hypoxia571  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示