摘要:
dp #贪心 #构造 #POI #Year2004 order 等于所有环的长度的 \(lcm\) \(dp_{i,j}\) 表示前 \(i\) 个质数组成和为 \(j\) 的最大 \(lcm\) 每个数一定是 \(p^k\),其它方案在贪心上都是不优的 在 \(dp\) 的时候记录方案,尽可能优先
阅读全文
posted @ 2024-04-04 17:07
xiaruize
阅读(26)
推荐(0)
摘要:
贪心 #POI #Year2004 询问操作等价于将当前的子树从一个点分为几棵树,类似于点分治的操作 所以询问可以转化为原树的最小点分树的大小 然后考虑对于每个点计算一个 \(f_x\) 表示答案,\(s_x\) 状压一个子树内的所有答案 因为点分治最多 \(O(logn)\) 层,所以状压 \(1
阅读全文
posted @ 2024-04-04 17:07
xiaruize
阅读(10)
推荐(0)
摘要:
博弈论 #阶梯博弈 #Year2004 #POI 对于每一个 \(a_i\) ,转化为它到 \(m-2\) 的间隔数,然后发现这个等价于阶梯博弈 阶梯博弈只考虑奇数位,但是同时也要考虑操作完偶数位以后是必败状态的情况 注意如果一开始在 \(m-2\) 上有数,那么必胜一定是先取这些数 // Auth
阅读全文
posted @ 2024-04-04 17:07
xiaruize
阅读(8)
推荐(0)
摘要:
网络流 #二分 #POI #Year2005 考虑二分答案,用 \(Dinic\) 来 \(check\) 具体来说,就是对每一个人限制流量,然后检查能不能把所有场全部流满 #include <bits/stdc++.h> using namespace std; #define int long
阅读全文
posted @ 2024-04-04 17:05
xiaruize
阅读(11)
推荐(0)
摘要:
欧拉路径 #数学 #POI #Year1999 考虑转化题面,在 \(u\rightarrow v\) 建边,得到一个图 原题意等价于求在这个图中至少加多少条边使得图中有一条欧拉路径(经过所有边的路径) \[res=\sum \limits_{u\in G}max(indegree_u,outdeg
阅读全文
posted @ 2024-04-04 17:05
xiaruize
阅读(13)
推荐(0)
摘要:
网络流 #有源汇上下界费用流 #最小点覆盖 #Year2002 #POI 最小点覆盖问题 这里可以直接有源汇上下界费用流 // Author: xiaruize #ifndef ONLINE_JUDGE #define debug(x) cerr << "On Line:" << __LINE__
阅读全文
posted @ 2024-04-04 17:05
xiaruize
阅读(10)
推荐(0)
摘要:
网络流 #二分 考虑二分答案,用 \(Dinic\) 来 \(check\) 具体来说,就是对每一个人限制流量,然后检查能不能把所有场全部流满 #include <bits/stdc++.h> using namespace std; #define int long long #define ul
阅读全文
posted @ 2024-04-03 16:39
xiaruize
阅读(17)
推荐(0)
摘要:
欧拉路径 #数学 考虑转化题面,在 \(u\rightarrow v\) 建边,得到一个图 原题意等价于求在这个图中至少加多少条边使得图中有一条欧拉路径(经过所有边的路径) \[res=\sum \limits_{u\in G}max(indegree_u,outdegree_u)+\text{原图
阅读全文
posted @ 2024-04-03 16:39
xiaruize
阅读(10)
推荐(0)
摘要:
网络流 #有源汇上下界费用流 #最小点覆盖 最小点覆盖问题 这里可以直接有源汇上下界费用流 // Author: xiaruize #ifndef ONLINE_JUDGE #define debug(x) cerr << "On Line:" << __LINE__ << #x << "=" <<
阅读全文
posted @ 2024-04-03 16:39
xiaruize
阅读(16)
推荐(0)
摘要:
dp #概率期望 \(dp_{i,x,y,z}\) 表示在不使用 \(i\) 的情况下,达到有 \(x\) 个石头,\(y\) 个剪刀,\(z\) 个布的情况的概率 转移可以做背包,每次加入一个 对于每个可能得状态,统计所有可能的下一步的每一个方案的期望,然后取最大值 // Author: xiar
阅读全文
posted @ 2024-04-02 17:00
xiaruize
阅读(18)
推荐(0)
摘要:
差分约束 难度在读入 对于每一个限制,转化为两个不等式,用差分约束 每次询问相当于添加一个限制,问是否仍然存在合法的差分约束的解,直接重新跑差分约束即可 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #endif
阅读全文
posted @ 2024-04-02 17:00
xiaruize
阅读(14)
推荐(0)
摘要:
dp #数学 #计数dp #组合 从大到小考虑将每个数加入当前的序列 \(dp_{i,j}\) 表示 \([1,i]\) 全部加入后,\(LISNumber=j\) 的方案数 对于一个新的数,有 \(x\) 个,枚举这个数加入的时候分为几段 \(k\) ,再枚举其中有多少段 \(cnt\) 加在一个
阅读全文
posted @ 2024-04-02 17:00
xiaruize
阅读(13)
推荐(0)
摘要:
贪心 #状压 一定优先选择当前的距离最远的两个点中的一个 proof 如果后取这两个,取到这两个点的时候的代价仍然为这个值,不会更优,、 但是对于中间的部分,代价只会不变或者更劣,所以优先选择这两个点中的一个是正确的 证毕 然后直接对当前选择节点状压,最多 \(O(2^{64})\) 种状态,但是其
阅读全文
posted @ 2024-04-02 17:00
xiaruize
阅读(13)
推荐(0)
摘要:
Nim游戏 建树,考虑公平组合游戏 对于一个点 \(SG(x)\),枚举它及它的子树,计算所有的后继状态,具体来说每个后继状态都是在这个子树中删除一条链,然后将分开的每一个子树的 \(SG\) 异或起来,这个值为这个子状态的 \(SG\) 值 然后 \(SG(x)=mex(SG(v))\) 特判最上
阅读全文
posted @ 2024-04-02 17:00
xiaruize
阅读(33)
推荐(0)
摘要:
网络流 #二分 考虑二分答案,用 \(Dinic\) 来 \(check\) 具体来说,就是对每一个人限制流量,然后检查能不能把所有场全部流满 #include <bits/stdc++.h> using namespace std; #define int long long #define ul
阅读全文
posted @ 2024-04-01 16:57
xiaruize
阅读(10)
推荐(0)
摘要:
欧拉路径 #数学 考虑转化题面,在 \(u\rightarrow v\) 建边,得到一个图 原题意等价于求在这个图中至少加多少条边使得图中有一条欧拉路径(经过所有边的路径) \[res=\sum \limits_{u\in G}max(indegree_u,outdegree_u)+\text{原图
阅读全文
posted @ 2024-04-01 16:57
xiaruize
阅读(13)
推荐(0)
摘要:
网络流 #有源汇上下界费用流 #最小点覆盖 最小点覆盖问题 这里可以直接有源汇上下界费用流 // Author: xiaruize #ifndef ONLINE_JUDGE #define debug(x) cerr << "On Line:" << __LINE__ << #x << "=" <<
阅读全文
posted @ 2024-04-01 16:57
xiaruize
阅读(8)
推荐(0)
摘要:
dp #预处理 \(dp_{i,j}\) 表示第 \(i\) 个选择,\(i\) 前面的第一个为 \(j\) 的方案数 预处理不合法的区间,暴力转移 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #endif #
阅读全文
posted @ 2024-04-01 15:18
xiaruize
阅读(27)
推荐(0)
摘要:
令所有的 \(w<h\) ,一个集合的 \(res=min(w)\times min(h)\) 按 \(w\) 排序,假设一开始的分组为 \([1,n],[n+1,2n]\),每次考虑加一个数到后一个区间内,就要维护后缀区间的第 \(n+1\) 大和第 \(n\) 大的数,考虑用 \(2\) 个mu
阅读全文
posted @ 2024-04-01 15:18
xiaruize
阅读(23)
推荐(0)
摘要:
\(dp_{i,j}\) 表示填了 \(i\) 个数,当前的颜色为 \(j\) 的方案数 \[ dp_{i,j}=\sum\limits_{k=1}^{tot}[k\neq j]dp_{i-1,k}+dp_{i,j}\times i \]对于每个 \(dp_i\) 建 segment_tree ,前
阅读全文
posted @ 2024-04-01 15:18
xiaruize
阅读(36)
推荐(0)
摘要:
二进制枚举每一个数是给它右侧的还是接收它右侧的,贪心的选择整倍数的,时间复杂度 \(\mathcal{O}(2^nn)\) // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #endif #include <bits
阅读全文
posted @ 2024-04-01 15:18
xiaruize
阅读(21)
推荐(0)
摘要:
后缀自动机SAM 建 SAM ,对于每个节点维护一个区间 \([l,r]\) 表示这个节点即其儿子能到的最大和最小的原串上的位置 对于每个点,答案为 \(min(r-l+1,len)\) ,因为要保证不能重复 // Author: xiaruize #ifndef ONLINE_JUDGE bool
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(14)
推荐(0)
摘要:
dp #贪心 \(dp_{i,j,k}\) 表示考虑前 \(i\) 段,已经用了 \(j\) 个字符,其中 \(k\) 个字符已经确定最后一个 转移可以每次枚举 \(j,k\) 的变化量,然后贪心的分配 具体的贪心为将 第一次出现的放在当前最后,最后一次出现的放最前 // Author: xiaru
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(14)
推荐(0)
摘要:
数学 #dfs 枚举一棵子树断开的边,标记这条边一个子树内的节点,在另一棵树上枚举断开的边,统计子树大小和与第一棵树匹配的点的个数 设第一棵树大小为 \(siz\),第二棵树大小为 \(tot\) ,其中匹配的点数为 \(cnt\) 那么这一对边的 \(S(e_1,e_2)=max(cnt,tot-
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(12)
推荐(0)
摘要:
莫比乌斯函数 #筛法 #gcd #数学 一定选 \(k\) 的倍数,原题目等价于 \([\frac{l}{k},\frac{r}{k}]\) ,选择 \(n\) 次,最后 \(gcd=1\) 考虑容斥去算,注意到超过 \(10^5\) 的质数的影响不好处理,但是因为区间长度,大于 \(10^5\)
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(13)
推荐(0)
摘要:
离散化 #dp #贪心 对左右端点离散化,令 \(L=min(r_i),R=max(L_i)\) \(dp_i\) 表示将所有碰到 \([L,i]\) 这个区间的连起来的最小代价 可以枚举所有的区间,对于所有的包含 \(i\) 的区间,因为 \(dp\) 单调递增,直接从它的左端点转移 反过来处理
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(14)
推荐(0)
摘要:
后缀自动机SAM #算法 SAM满足如下性质 有向无环图 每个转移只有一个字符 接受且只接受 \(S\) 的后缀 节点数在满足上述条件下最小 考虑不满足性质 \(3\),那么 \(trie\) 就可以做到 将这个 \(trie\) 建出来后,发现有很多完全相同的子树 定义 \(endpos(s)\)
阅读全文
posted @ 2024-03-30 16:48
xiaruize
阅读(19)
推荐(0)
摘要:
最小割 #最短路 #对偶图 最优策略下不可能出现非整数的边权,一个自然的想法就是对原图建图然后求最小割 但是这不能满足时间限制 观察这个图,有建图方法,它一定是一个 平面图,考虑这样的建图: 对于每个被分出的格子,都在这个格子中建一个点表示它,然后对于两个格子之间的连边,这条边的权值就是与它相交的一
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(22)
推荐(0)
摘要:
决策单调性 #dp 满足决策单调性,双端队列维护,可以二分出每两个限制的边界位置 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #else #define debug(x) #endif #include <bi
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(16)
推荐(0)
摘要:
妙妙题 #dp 转换一下 \(a_i^2\),发现这个值等价于操作 \(2\) 次最后得到结果一样的方案数 那么这就是容易的了 \(dp_{k,i,j}\) 表示操作了 \(k\) 轮,第一次的上面取了 \(i\) 个,第二次的上面取了 \(j\) 个 转移分 \(4\) 种暴力就行 注意空间限制要
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(41)
推荐(0)
摘要:
Dinic #网络流 #拓扑排序 每个点向保护的点建图,对这个图拓扑排序,然后就是求这个图的最大完全子图,就是 \(dinic\) 板子 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #else #define
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(12)
推荐(0)
摘要:
二分图最大匹配 #贪心 如果没有字典序最小的限制,直接二分图最大匹配就可以了 考虑怎么让字典序最小 倒序匹配左侧节点,对于每个节点,优先尝试字典序较小的方案,用 hungary 就行 另,如果用费用流,需要将斐波那契的第 \(10^4\) 位作为费用 // Author: xiaruize #ifn
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(24)
推荐(0)
摘要:
floyd #最短路 floyd 维护最短路和方案即可 因为 floyd 的本质是一个每次加入一个点的 dp ,所以这样的统计是不会重复计算的 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_of_memory_use; #else #defi
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(23)
推荐(0)
摘要:
换根dp #贪心 由限制 \(h_i\) 大于点的度数,最终回到根的答案必然是经过每个节点的 根的答案可以 \(\mathcal{O}(n)\) 的算出 考虑如何换根,分 \(3\) 种情况(假设现在由 \(rt \rightarrow x\)) 当前的 \(rt\) 有多余的出边,那么用这个出边走
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(20)
推荐(0)
摘要:
dp #状压dp #树上dp #预处理 建树,将每个子串的 \(fa\) 设为它的最长的存在的前缀,那么原来的题转化为 对于一棵树标号,使得 \(a_i\) 为 \(b_i\) 的祖先 对于原限制,最多有 \(16\) 个点被影响,可以状压,这样的时间复杂度是 \(\mathcal{O}(3^{16
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(15)
推荐(0)
摘要:
dp \(dp_{i,j,0/1/2}\) 表示考虑到 \(i\) ,用了 \(j\) 个,当前这个位置是 0. 被占用,且联通块内没有完整的 被占用,且联通块内有完整的g' 空 暴力转移即可 // Author: xiaruize #ifndef ONLINE_JUDGE bool start_o
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(17)
推荐(0)
摘要:
dfs #计数 #数学 #妙妙题 考虑限制二,这个限制允许我们将原矩阵的每一位 \(s_{i,j}=a_i+b_j\) 对于每个限制 \(3\) 由 \(a_i\rightarrow b_j\) 权值为 \(s_{i,j}\) 的边 \(dfs\) 可以算一种方案,强制这种方案中出现 \(0\) 这
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(32)
推荐(0)
摘要:
矩阵 #矩阵优化dp #dp #循环矩阵 考虑暴力 \(dp_{i,j}\) 表示第 \(i\) 次操作后停在 \(j\) 的方案数 注意到数据范围为 \(10^{18}\) ,考虑矩阵优化转移 对于每 \(n\) 轮,转移方案是一样的,对应的矩阵也是一样的,时间复杂度是 \(\mathcal{O}
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(29)
推荐(0)
摘要:
Nim游戏 #博弈论 #SG函数 #数学 设数 \(x=\prod\limits_{i=1}^{n}p_i^{k_i}\) 那么 \[SG(x)=\sum\limits_{i=1}^n k_i \]当区间 \([l,r]\) 的 \(\mathcal{xor} _{i=1}^{m} SG(a_i)=
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(25)
推荐(0)
摘要:
dp #贪心 #妙妙题 \(|s|\leq 25\) 从前往后确定每一位,枚举当前这一位填什么字符 考虑确定一个前缀的 \([min,max]\) \(min\) 为将没有确定的位全部填为 \(s_i\) 后的代价 \(max\) 为将没有确定的位全部填成原串中没有出现的那个字符后的代价 算一个串的
阅读全文
posted @ 2024-03-28 15:27
xiaruize
阅读(21)
推荐(0)