2025.6做题记录

洛谷P5354 [Ynoi Easy Round 2017] 由乃的 OJ
首先你要会起床困难综合症,就是看每一位最开始是 0/1,做完后是什么,然后贪心。
容易发现操作后的结果是可以合并的,也就是说可以上线段树,考虑树剖。
设左子节点的结果是 f0f1,右子节点的结果是 g0g1,这个点的结果是 a0a1,显然有 a0=(f0&g1)|(~f0&g0)a1=(f1&g1)|(~f1&g0),当然还要维护倒过来做的。
修改是简单的,查询就是跳一下重链。
洛谷P8026 [ONTAK2015] Bajtocja
连通性显然是每个图开个并查集维护,两个点合法当且仅当它们在每个图的并查集祖先都相同,考虑对每个图的每个点随机一个权值,然后异或哈希维护。
统计答案的时候开个 unordered_map 就行了。
随机数用 mt19937_64
洛谷P4149 [IOI 2011] Race
先把原图的点分树建出来,然后从根开始搜,每搜到一个点就标记那个点,然后统计它子树的答案。
洛谷P8512 [Ynoi Easy Round 2021] TEST_152
Ynoi 里比较水的一道题。
区间赋值考虑颜色段均摊。
把每个询问挂到右端点上,然后枚举操作,做完后看这个操作的询问,答案就是当前数组的和减去在数组里左端点前出现的数的总和,可以用树状数组维护每个操作在当前数组剩下的数字的和。
洛谷P8169 [eJOI 2021] Dungeons
\(S\) 表示一个起点集合,如果对于这个集合里所有起点相对位置为 \((x,y)\) 的地方都是能走的,我们称 \((x,y)\) 关于 \(S\) 是合法的。
考虑对于一个 \(S\),从 \((0,0)\) 开始搜出所有能走到的关于这个集合合法的 \((x,y)\)
然后看当前能看到的格子中,如果有一个格子满足这个集合中从一些起点出发看到的不一样,就分成两个集合,取两个集合答案的最小值。
如果没有就统计答案,然后返回。
写的时候,可以对一个相对位置 \((x,y)\),记录下哪些起点的这个位置是能走的或看到的是空地/金币/墙,可以状压。
洛谷P5537 【XR-3】系统设计
很妙的一道题。
发现树的形态不变,考虑对于每个节点,处理出从根到这个节点的序列的哈希。
查询的时候线段树二分答案前缀,单调性是显然的。
具体的,在线段树上的每个极大区间,如果当前的哈希值能拼上这一段的哈希值就拼上去,否则就在这个区间里二分。
线段树单点修区间哈希。
洛谷P6617 查找 Search
先不考虑修改,有一个简单的做法是设 \(lst_{i,j}\) 表示 \(i\) 前面最后的权值等于 \(j\) 的位置,对于每个 \(i\),记录下 \(pre_i = lst_{i,w-a_i}\),查询就是看区间最大值是不是大于等于 \(l\)
有修改后显然不能这样做,有一个很好的东西是如果 \(lst_{i,a_i}>lst_{i,w-a_i}\),就把 \(pre_i\) 改成 \(0\),正确性显然。
用一个 set 维护每个权值的出现位置,\(pre\) 用线段树维护,可以发现每次修改要改 \(pre\) 的位置最大是 \(5\) 个。
洛谷P9128 [USACO23FEB] Fertilizing Pastures G
先考虑 \(T=0\)
最小时间显然是 \(2\times n-2\)
\(f_i\) 表示走完子树的答案,\(s_i\) 表示子树里价值的和,\(sz_i\) 表示子树的大小,\(p\) 表示当前节点的儿子。
要给 \(p\) 一个合适的顺序,最小化 \(\sum\limits_{i}s_{p_i}+f_{p_i}+s_{p_i}\times (\sum\limits_{j<i}2\times sz_{p_j})\)
前面两项是固定的,设 \(a_i=s_{p_i}\)\(b_i=2\times sz_{p_i}\),要最小化 \(\sum\limits_{i}a_i\times(\sum\limits_{j<i}b_j)\)
考虑交换 \(p\) 的相邻两项,更优的条件,推一些式子可以发现是 \(\frac{a_{i+1}}{b_{i+1}}>\frac{a_i}{b_i}\)
所以对儿子按 \(\frac{a_i}{b_i}\) 降序排就得了。
考虑 \(T=1\)
最小时间显然是 \(2\times n-2-d\)\(d\) 表示树里的最大深度。
\(g_i\) 表示把儿子里子树里有最深的点的儿子放到最后算的最小时间,如果 \(i\) 子树里没有最深的点就不处理。
这个是简单的,排序后枚举儿子,如果这个儿子的子树里有最深的点就算出把它放到最后的答案,然后取最小值。
洛谷P7831 [CCO 2021] Travelling Merchant
容易发现出度为 \(0\) 的点肯定无解,所以在反图上跑一遍拓扑,被拓扑到的就是无解的。
把拓扑时删的点的入边删了,然后把边按 \(r\) 从大到小排,枚举边,设这个边为 \((a,b,r,p)\)
更新答案 \(ans_a=\min\{ans_a,r\}\),然后把这条边删了。如果 \(a\) 的出边都没了,就从 \(a\) 开始在反图上拓扑更新答案,拓扑时遍历到的边也要删了。
洛谷P11831 [省选联考 2025] 追忆
bitset 要手写,就是开 \(\frac{10^5}{\omega}\)(大约为 \(1570\))个 ull,每个 ull\(63\) 个 01 位。
先对每个点开个大小为 \(n\)bitset,把 bitset 里自己的编号那一位设为一,然后在反图上拓扑处理可达性。
\(a\)\(b\) 的值域分块,对两个数组各开根号个 bitset,设为 \(ba\)\(bb\),处理出 \(a\)\(b\) 在这个块里的点的编号,然后做后缀或。
修改是简单的。
查询的时候,先处理出 \(a\) 符合要求的 bitset,设它为 \(A\),与上 \(x\) 能到的点的 bitset
然后可以先求出答案在哪个块,再在块里枚举。求块的时候,设当前的块为 \(p\),枚举手写 bitset 的每一位 ull,如果 \(A\) 的这一位与上 \(bb_{p+1}\) 的这一位的结果不为 \(0\),就把 \(p\) 加一,求块内答案是简单的。
洛谷P4690 [Ynoi Easy Round 2016] 镜中的昆虫
先考虑单点修怎么做。
对每个 \(i\),处理出 \(pre_i\) 表示上一个和 \(i\) 颜色相同的位置,没有则为 \(0\)
假设在二维平面上有 \(n\) 个点 \((pre_i,i)\),那么查询的答案是在 \([0,l)[l,r]\) 的点的权值和。
修改的时候对 \(pre\) 有影响的位置显然没多少个,可以加个权值为 \(-1\) 的点删旧的点,再把更新 \(pre\) 后的点加回去。对每个颜色开个 set 维护出现位置就行。
这个东西是二维数点,用 cdq 做。
考虑区间赋值:
看到区间赋值可以想到 ODT。
有一个结论是 \(pre\) 的修改次数是 \(O(n+m)\) 级别。感性理解,ODT 最开始有 \(n\) 个点,修改最多会加 \(m\) 个点,每个点在修改的时候最多会被删一次,如果是修改时的边界点,因为最多就两个,所以影响不大。
然后可以开一个序列的 ODT,对每个颜色开 ODT,修改的时候就可以维护了。
洛谷P6965 [NEERC 2016] Binary Code
一个串最多有两种形态,考虑 2-sat。
如果一个串出现了三次以上,那么显然是无解的,用哈希判掉。
开两个形态一样的 trie,\(T1\) 上点往父亲连一条边,\(T2\) 上点往儿子连一条边,每个点往对应的串的另一个状态连。
建好树后,每个状态向 \(T1\) 上对应的点的父亲连,向 \(T2\) 上对应的点的两个儿子连,然后每个点对应的几个状态互相连。
建图方式显然是对的。
洛谷P1117 [NOI2016] 优秀的拆分
\(f_i\) 表示结尾在 \(i\) 的 AA 状子串有多少个,\(g_i\) 表示开头在 \(i\) 的 AA 状子串有多少个,答案就是 \(\sum\limits_{i=2}^{n-2}f_i\times g_{i+1}\)
考虑枚举 AA 的长度的一半 \(len\),把 \(len\) 的倍数的位置设为关键点,易知长度为 \(2\times len\) 的 AA 串一定经过两个关键点。
枚举这两个关键点 \(i\)\(j\),有 \(j=i+len\)。设 \(lcp=\min(len,lcp(\operatorname{suf}(i),\operatorname{suf}(j)))\)\(lcs=\min(lcs(\operatorname{pre}(i-1),\operatorname{pre}(j-1)),len-1)\),这两个可以用二分哈希求,连 SA 都不用。
\(lcp+lcs<len\) 时,在 \([i+lcp,j-lcs)\) 里一定有一个和 \(j+lcp\) 后面的匹配不上(不然 \(lcp\) 可以变大),也就是无解。
否则,设 \(l=lcp + lcs - len\),则起点在区间 \([i-lcs,i-lcs+l+1]\) 里,终点在 \([i-lcs+2\times len-1,i-lcs+l+2\times len]\) 里,差分一下然后区间加一。
P11993 [JOIST 2025] 迁移计划 / Migration Plan
对每个深度维护一个以 \(dfn\) 为下标的线段树,合并的时候是线段树合并,单点修是在对应深度的树上修改,查询的时候是在对应的深度的树上查询 \([dfn_p,dfn_p+siz_p-1]\) 的和。
感性理解一下,这个是对的。
洛谷P6665 [清华集训 2016] Alice 和 Bob 又在玩游戏
可以发现森林中每一棵树都互不影响,所以考虑单独处理。
\(f_i\) 表示 以 \(i\) 为根的树的 \(SG\) 值,\(g_i\) 表示 \(\bigoplus\limits_{v\in son_u}f_v\)
转移 \(f_u\) 的时候,考虑对 \(u\) 子树里每一个点做一次操作的 \(SG\) 值。对于子树里的一个点 \(v\),它的值是到 \((\bigoplus\limits_{x\in path(u,v)}g_x\oplus f_x)\oplus f_u\)
对每个点开一个 01trie,枚举 \(u\) 的儿子 \(v\),把 \(v\) 的trie 全局异或 \(g_u\oplus f_v\),然后合并。做完后 \(f_u\) 就是树里的 mex。
洛谷P4689 [Ynoi Easy Round 2016] 这是我自己的发明
简单题。
考虑随便选个点当根,搜出 dfn,子树就变成了区间。
换根是简单的,考虑这个点是根/根在点的子树里/根不在点的子树里三种情况,一个点最多能拆成两个区间。
把区间出现次数拆成前缀和的减,然后直接拆出最多 \(16\) 个询问。
然后跑个莫队就做完了。
P3501 [POI 2010] ANT-Antisymmetry
定义合法串为:
\(S\) 为一个合法串。

  1. 空串为合法串。
  2. \(1S0\) 为合法串。
  3. \(0S1\) 为合法串。

容易发现从一个点往外拓展,是有单调性的。
枚举这个点,然后二分哈希。
洛谷P6333 [COCI 2007/2008 #1] ZAPIS
简单题。
考虑区间 dp,设 \(f_{l,r}\) 表示 \([l,r]\) 合法的方案数,转移的时候看 \(s_l\)\(s_r\) 能不能匹配上,然后枚举中间的点 \(p\) 统计。
可以发现会有计重的,比如 ()()(),这时候可以设 \(g_{l,r}\) 表示 \(s_l\)\(s_r\) 匹配且 \([l,r]\) 合法的方案数,枚举 \(p\) 时,强制让 \(s_l\)\(s_p\) 匹配上,贡献就是 \(g_{l,p}\times f_{p+1,r}\)
需要注意的是,如果答案为 101111,要输出 01111 而不是 1111,所以可以对 \(10^6\) 取模而不是 \(10^5\)
洛谷P10499 开关问题
简单题。
\(a_i\) 表示操不操作开关 \(i\)\(S_i\) 表示操作开关 \(j\) 后会对 \(i\) 开关有影响的 \(j\) 的集合,也就是 \(i\) 的入边和 \(i\)
容易发现,对每个 \(i\) 都有一个限制 \(\bigoplus\limits_{j\in S_i}a_j=st_i\oplus ed_i\),其中 \(st\)\(ed\) 表示开始和结束状态。
然后这玩意其实就是 P2447,无解和数量和 P2455 差不多。
洛谷P8990 [北大集训 2021] 小明的树
神秘题。
把没电亮的点称为黑点,点亮的称为白点,合法条件可以转化为所有黑点联通。感性理解一下,如果不连通,那么肯定有某些黑点的祖宗里有白点,那些白点是不合法的。
\(b_i\) 表示点完 \(a_i\) 后黑点连通块的个数,显然当 \(b_i=1\) 时合法。根据经典结论,连通块个数为点数-边数,也就是黑点数量减去两边都是黑点的边的数量。第一个为 \(n-i\),第二个初始是 \(n-1\),所以把 \(b_i\) 初始化为 \(1-i\)
考虑贡献。可以发现一个树的贡献是两端颜色不同的边的数量,用 \(c_i\) 来表示,最初为 \(0\)
最后考虑怎么维护 \(b\)\(c\)。设 \(t_i\) 表示点 \(i\) 被点亮的时间。对于一条边 \((u,v)\),它对 \(b\) 的影响是 \([\min(t_u,t_v),n)\)\(1\),对 \(c\) 的影响是 \([\min(t_u,t_v),\max(t_u,t_v))\)\(1\)
对于修改,这个是简单的,区间修的次数很少。
对于查询,要维护 \(b_i=1\)\(c_i\) 的和,可以开个线段树,维护最小值,最小值个数和最小值的 \(c_i\) 的和。
洛谷P2566 [SCOI2009] 围豆豆
从每个豆往右射一条线,用 \(c_i\) 表示豆 \(i\) 的射线和多少条多边形的竖边相交,如果 \(c_i\) 是奇数,那这个豆就在多边形里。
考虑状压选点的状态,枚举起点,处理出选出一个状态要用的最少步数。
从起点跑 bfs,跑的时候处理状态。

posted @ 2025-05-31 12:43  天域_awa  阅读(42)  评论(0)    收藏  举报