随笔分类 - 题解
摘要:求出 fuf_ufu 表示 111 到 uuu 的最少翻转次数,这一部分容易使用最短路处理。具体来说可以把每个状态拆成 gu,0/1g_{u,0/1}gu,0/1 表示 111 到 uuu,目前翻转次数为偶数或者奇数的最少翻转次数,跑最短路即可。 然后考虑每个点 uuu 在最终最短路下的翻转次数
阅读全文
摘要:考虑一个三次方做法: 枚举两条横线,求出有多少条竖线和两条横线都相交,假设为 ccc 个,那么对答案有 (c2)\dbinom{c}{2}(2c) 的贡献。复杂度 O(n3)O(n^3)O(n3)。 考虑求出每条横线与每条竖线是否相交,这部分可以 O(n2)O(n^2)O(n2) 求出,那么就可以
阅读全文
摘要:设 dud_udu 为 uuu 的度数,显然删掉 uuu 后树变成了 dud_udu 个连通块,至少需要 du−1d_u-1du−1 次合并才能变成一个连通块,所以答案下界显然是 du−1d_u-1du−1。 但是下界不一定取得到。注意到这个东西其实是求最小生成树,不妨考虑 Kruskal
阅读全文
摘要:考虑不妨设每个 (x,y)(x,y)(x,y) 都有 x≤yx \leq yx≤y,容易发现规定顺序没有影响。 考虑 (x1,y1)(x_1,y_1)(x1,y1) 和 (x2,y2)(x_2,y_2)(x2,y2),什么时候可以比较。当且仅当 x1≤x2∧y1≤y2x_1 \leq x_2
阅读全文
摘要:Tag:二分图匹配,AC 自动机,Dilworth,Konig。 题意:给定 nnn 个互不相同字符串 sis_isi。求最多能保留多少个字符串,使得两两之间互不包含。 范围:n≤750n \leq 750n≤750,∑∣si∣≤107\sum \left| s_i \right| \leq 10
阅读全文
摘要:离线倒着做,变成连边,以及询问所有连通块直径最大值。 然后是一个经典结论,就是当边权非负时,两个连通块合并,新的直径端点必然是之前两个连通块的四个端点的其中两个,于是你可以使用并查集维护连通块,以及每个连通块的直径端点。合并的时候大力分讨几种即可。 证明: 考虑新的直径,要么在原来的两个连通块内部,
阅读全文
摘要:题意:给定 nnn 个字符串 sis_isi,每个字符串有权值 viv_ivi。qqq 次询问,每次给定一个字符串 SSS 和一个数 kkk。定义 cnticnt_icnti 为 sis_isi 在 SSS 中出现次数。求 cnti×vicnt_i \times v_icnti×vi 的
阅读全文
摘要:唐题。 考虑瞎状压,fi,Sf_{i,S}fi,S 表示末尾的字符串是 sis_isi,目前 SSS 这个二进制状态为 111 的位置已经是子串了。转移直接枚举上一个位置哈希。注意要把本身就在另一个字符串的子串中的删掉并去重。 #include <bits/stdc++.h> using nam
阅读全文
摘要:考虑反向建图,然后设 fuf_ufu 表示 uuu 点的答案,fn=+∞f_n = + \inftyfn=+∞。然后 Dijkstra 维护,每次拓展到一个新的点,相当于考虑一些同余相关的问题。容易发现这个东西可以 O(1)O(1)O(1) 求出,就做完了。 #include <bits/std
阅读全文
摘要:注意到对方的操作与我们选择的无关。故可以直接 DP 求出对方最终点数为 iii 的概率。这部分可以前缀和优化。 现在考虑我们怎么做能最优化概率。逆着 DP,fif_ifi 表示假如初始点数为 iii 的最优概率。f0f_0f0 即为所求。你发现转移分两部分,一部分是,我在 iii 不动,另一部分
阅读全文
摘要:题意:P2934 [USACO09JAN] Safe Travel G。 简要题意:nnn 个点 mmm 条边的简单无向连通图,对于 i∈[2,n]i \in [2,n]i∈[2,n],求出如果删掉 111 到 iii 最短路的最后一条边,新的最短路长度。保证 111 到任意一个点最短路唯一。 解法
阅读全文
摘要:我会无脑做法,哈哈! 考虑没有删除操作怎么做?直接每个点维护一个标记,下传直接取 max\maxmax 就好。 要删除,直接考虑线段树分治,删除变撤销。然而取 max\maxmax 貌似不好直接撤销。考虑标记永久化,这样就不需要下传。单次区间修改影响 O(logn)O(\log n)O(log
阅读全文
摘要:题意:P8264 [Ynoi Easy Round 2020] TEST_100。 简要题意:nnn 个数的序列 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,⋯,an,qqq 次询问,每次给定 l,r,vl,r,vl,r,v,求依次访问 l∼rl \sim rl∼r
阅读全文
摘要:提供一个无脑做法。 考虑操作的本质是让区间最大值替代整个区间,于是我们要维护序列删掉一个区间,还要维护单点插入。这玩意可以用平衡树做,但是难以拓展到每个点求答案上。 不妨这样:对于每次操作 [l,r][l,r][l,r],我们都找到 [l,r][l,r][l,r] 对应的原序列的区间 [l′,r′]
阅读全文
摘要:注意到树高度不超过 404040,我们考虑有没有什么可以突破的地方。 我们要求的答案也是与路径中的边数有关,不妨考虑 DP,fi,j,kf_{i,j,k}fi,j,k 表示从根到 iii 经过了 jjj 条未翻修的公路和 kkk 条未翻修的铁路,考虑以 iii 为根的子树的最小答案。转移考虑选的是
阅读全文
摘要:操作与一个点相邻的所有点,考虑以 111 为根 DFS,然后将每个这样的点分为其父亲和儿子考虑。注意到父亲只有一个,考虑只维护儿子的答案,父亲特判处理一下即可。 考虑我们要做什么操作?单点修改,全局 +1+1+1,求全局异或值。考虑 01-Trie 维护。单点修改就是删一个数加一个数,容易维护,全局
阅读全文
摘要:考虑原图如果存在一条从 aaa 到 bbb 的路径,那么新图中 aaa 会向路径上每一个点连边,证明显然。 进一步的,一个强连通分量内部在新图上必然是完全图。 考虑缩点,然后直接朴素 DP 即可,每个 SCC 内每个点都可以走,SCC 之间只能按照 DAG 的走法走。fuf_ufu 和 gug_u
阅读全文
摘要:不会一点字符串算法,考虑哈希。 注意到一个特殊限制是 ∣s∣≤100\left| s\right| \leq 100∣s∣≤100,于是我们可以简单处理出每个点向上不超过 100100100 步的哈希值。 考虑询问答案时怎么处理。我们考虑 sss 在这个串,只有三种。令 L=LCA(u,v)L=\
阅读全文
摘要:考虑 lll 固定时怎么做,每条边的边权是 000 或者 111,求路径上每个极长连续 111 的段长作为下标的 fff 的和。 树剖维护,问题转化成序列问题,只需要维护线段树,每个区间维护对应答案以及左侧连续 111 长度和右侧连续 111 长度,合并时容易更新答案。 现在 lll 不固定,考虑离
阅读全文
摘要:马上省选了不会欧拉序,来补补。 首先看到动态维护直径比较容易想到的肯定还是 LCT。常见套路是两个连通块合并后的两直径端点必然是原来两个连通块 444 个直径端点中的其二。证明显然。新直径要么是原来两个连通块直径,要么经过这条新的边。又一个点到树上最远距离的点一定是直径端点之一,结论必然成立。 于是
阅读全文