自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 收藏
  • 关注

原创 目录

常用专栏也就是目录啦。文章目录动态规划数据结构图论贪心数论生成函数构造常用语法,最新语法初赛二分随笔动态规划动态规划数据结构数据结构图论图论贪心贪心数论数论生成函数生成函数构造构造常用语法,最新语法语法初赛初赛二分二分随笔随笔emmm 就是有些尴尬的东西。...

2021-10-01 21:39:31 89

原创 论低分构造题

2000 + 构造题

2021-09-28 10:27:59 128

原创 UOJ #593. 新年的军队 题解

属实是一道神仙题,估计是去年这个时候听说了这道题,最近把这个坑填了。给后面要来写的人提个醒,这个题其实没有想象地那么恐怖,代码其实也不复杂,只是推导十分困难。我说我这篇是全网最详细的不过分吧。...

2022-06-02 19:34:34 617 2

原创 浅谈AC自动机

浅谈AC自动机建议学过 AC 自动机的人来看。注意我们一开始直接建立串的时候是 Trie\tt TrieTrie 图,之后建立 fail\tt failfail 指针的时候才是真正的 ACACAC 自动机。具体来说对于 Trie\tt TrieTrie 上深度从小到大的一条链,对应的是一个曾经在某个或者多个串中出现过的子串。如果说是一条从根到底的链那本质就是代表一个串,显然对于一条链之间的点,本质上深度小的是深度大的前缀串。用处:我们可以通过遍历 Trie\tt TrieTrie 图来不重

2021-11-06 20:06:01 249

原创 三元环计数

三元环计数就是考试的时候整了一个这个科技,我没想出来,然后无了…具体来说就是计算图中三元团的个数。有一个 O(mm)O(m\sqrt m)O(mm​) 的算法:让度数大的点连接度数小的点。枚举每个点并将其相邻的点记录匹配点为当前点 iii。枚举当前点邻居的邻居,看匹配点是否是点 iii。每个三元团只会被计算一次。分析一下复杂度:每个点的入度度数最大是 O(m)O(\sqrt m)O(m​),这里可以考虑反证:如果大于 m\sqrt mm​,那么连边就是不合法的。所以打标记是

2021-11-05 16:08:32 538

原创 浅谈欧拉路径,欧拉回路,以及有向图欧拉回路的计数

浅谈欧拉路径,欧拉回路文章目录引入欧拉图欧拉路径定义:无向图有向图欧拉回路定义无向图有向图具体实现套路字典序要求拆点成边Best 定理限制具体部分例题引入前有哈密顿路径,表示经过每个点恰好一次,现有欧拉路径,表示经过每条边恰好一次。许多题目重要的是建模,往往最浅的建模就是点之间的连边,表示可以到达。如果说需要满足到达每个点一次,这就变成了 NPC\tt NPCNPC 问题。但是我们往往可以将一个信息拆分成若干个信息,变成边之间的关系,这样就有多项式复杂度的解法,同样这个是可以求方案的。本篇会向读者

2021-10-21 21:35:45 499

原创 浅谈 Wqs 二分

浅谈 Wqs 二分主要是今天写 「九省联考 2018」林克卡特树 的时候遇到了,就学一下。文章目录使用条件具体实现边界处理使用条件题目中对于一种 Dp\tt DpDp 有限制,但是如果没有限制,其复杂度是正确而且很好求的。举个例子来说:将一棵树划分成 kkk 条链,我们 Dp\tt DpDp 的时候只需要记录当前节点是否被匹配过,以及是否正在被匹配即可,而且我们还要考虑总共有几条链,进行划分。但是如果不考虑链的数量,这个 Dp\tt DpDp 显然是 O(n)O(n)O(n) 的。

2021-10-19 21:42:35 197

原创 Tarjan 缩点,强联通分量

Tarjan 缩点,强联通分量文章目录引入代码基础定义强联通分量定义:代码实现:边双联通分量和桥定义:代码实现:点双联通分量和割点定义:代码实现引入如果说需要对于一个图上进行 Dp\tt DpDp,但是同一个环上的点无法进行转移怎么办?我们只能做 DAG\tt DAGDAG 上的 Dp\tt DpDp,但是有环我们该怎么办?缩环!缩点!求强联通!当然我不是说隔壁的带花树。虽然说所有的代码都是我随手打的,但是都已经经过测试,请放心阅读。代码基础定义dfn[x]表示当前点遍历顺序的

2021-10-19 15:40:48 74

原创 差分约束浅谈

差分约束浅谈还是挺难的一个东西。文章目录@[toc]引入实现负环最长路和最短路的区别常见例题:乘法化加法:最大最小值的应用转换引入考虑一个限制 Ai≤xi+CiA_i \le x_i + C_iAi​≤xi​+Ci​ 其中 xix_ixi​ 是一个给定的值。A,CA, CA,C 表示两个位置之间的关系。发现对于同一个 AiA_iAi​ 总共有若干个限制,那么也就是意味着 A=min⁡i(xi+Ci)A = \min_i(x_i + C_i)A=mini​(xi​+Ci​)。发现这个东西就是

2021-10-14 13:38:28 229

原创 AT2062 [AGC005D] ~K Perm Counting 题解

AT2062 [AGC005D] ~K Perm CountingAT2062 [AGC005D] ~K Perm Counting一个有趣的做法。发现合法的情况直接算是不好算的,我们考虑进行二项式反演,也就是钦定有多少个是不合法的。考虑一个位置 iii 可以向 i±ki\pm ki±k 连边。我们不妨考虑左边是排列,右边是位置的二分图。那么本质上钦定 iii 个不合法的就是对于这样的二分图满足其匹配是 i−1i - 1i−1。对于匹配是 iii,长度是 jjj 的链,方案数就是 (i+

2021-10-11 16:25:43 120

原创 AT2000 [AGC002F] Leftmost Ball 题解

AT2000 [AGC002F] Leftmost BallAT2000 [AGC002F] Leftmost Ball感觉转移还是挺难的。Orz AK_STAR\color{white} Orz\ AK\_STAROrz AK_STAR我们不妨考虑随便染色,对于一种合法的染色肯定是对于任意前缀和白色的数量都大于等于颜色的数量。那么我们不妨考虑通过白色来计数,我们不妨钦定每次填一种颜色的时候直接匹配最靠左没有匹配过的白色点。设 f(i,j)f(i, j)f(i,j)

2021-10-11 14:54:26 108

原创 Kruscal 重构树浅谈

Kruscal 重构树浅谈这个算法本质上就是通过 Kruscal\tt KruscalKruscal 重构树的过程将边权变成点权之后建立一个堆。具体来说就是每次选择一条合法的边,将边权变成点权之后连接原来边两边的节点。这个是生成树上的性质,有些大佬说可以类比成笛卡尔树,不过那个是序列上的满足堆和 Bst\tt BstBst 的性质的树。可能性质还笛卡尔树更多一点。常用解法跳父亲找到符合条件的最小点。维护 dfs\tt dfsdfs 序判断点是否在内。结合动态规划和数据结构维护书上信

2021-10-09 19:56:52 101

原创 [NOI2018] 归程 题解

[NOI2018] 归程[NOI2018] 归程讲一下科技 Kruscal\tt KruscalKruscal 重构树的做法。考虑到积水的问题,我们肯定是贪心选择积水深度最大的边进行建立重构树。那么这个就是一个小根堆。之后考虑我们如何回答询问,对于一个询问的水深度,跳父亲。同时维护一下每个点的子树距离 111 节点距离最小的点即可。对于 Kruscal\tt KruscalKruscal 重构树,每次根据 Kruscal\tt KruscalKruscal 的过程选出边,但是将边权变成点权之

2021-10-09 19:47:11 107

原创 [IOI2018] werewolf 狼人 题解

[IOI2018] werewolf 狼人[IOI2018] werewolf 狼人可以考虑到每一条边能否通过对于人形态来说,取决于两点的最小值,对于狼形态来说取决两点的最大值。那么我们不妨考虑将两条边的边权定为上述两者,这样就有两张联通的无向图,我们考虑既然不考虑路程的限制我们一个肯定是需要考虑最大生成树另外一个就是最小生成树。使用 Kruscal\tt KruscalKruscal 重构树建立两棵树,一个是大根堆另一个是小根堆。对于两个 x,yx, yx,y 能否到达取决于是否存在一个点同

2021-10-09 19:38:31 223

原创 Hdu6355 Fireflies 题解

Hdu6355 FirefliesHdu6355 Fireflies发现网上没有什么题解 …\dots…题目描述在一个 nnn 维度的超立方体,每一维度的大小是 pip_ipi​。你可以在任意位置放一个萤火虫,萤火虫每次只能在一个维度移动一个单位,对于 xi→yix_i \to y_ixi​→yi​ 需要保证 xi+1=yix_i + 1 = y_ixi​+1=yi​,而且不能超过超立方体。求最开始最少放多少个,才能保证存在一种方案,对于每一个单位空间都有一个萤火虫遍历它。我们考虑

2021-10-09 15:34:10 124

原创 P4719 【模板】“动态 DP“&动态树分治 题解

P4719 【模板】"动态 DP"&动态树分治P4719 【模板】“动态 DP”&动态树分治先不考虑修改,可以想到 Dp\tt DpDp:设 f(i,0/1)f(i, 0/1)f(i,0/1) 表示当前的点是否选择,那么转移可以得到:f(u,0)=∑v∈sonumax⁡(f(v,0),f(v,1))f(u,1)=∑v∈sonuf(v,0)\begin{aligned}f(u, 0) &= \sum_{v \in son_u} \max(f(v, 0), f(v, 1)

2021-10-08 16:26:05 107

原创 最小链覆盖 Dilworth’stheorem

话说这个专题网上的讲解都没有很全,窝就将他们的总和一下。如果有问题请私信,评论。首先说一下最小链覆盖定理,这个本质上是有点抽象的。偏序集\color{red} \text{偏序集}偏序集的概念:我们设当前的全集为 XXX。也就是一个 偏序集\color{red}\text{偏序集}偏序集,因为其元素部分可以比较大小。链对于 XXX 的一个子集满足其是全序集,及其所有的元素可以比较大小。反链对于 XXX 的一个子集,满足其任意非空子集都不是全序集, 即所有的元素不能比较大小。链覆盖若干个链

2021-10-08 15:13:55 563

原创 CF1197E Culture Code 题解

CF1197E Culture CodeCF1197E Culture Code显然 Dp\tt DpDp 肯定是不能依赖于体积的。我们考虑选择当前位置的方案。容易发现每个点能选择的对象构成了一个 DAG\tt DAGDAG。设 f(i)f(i)f(i) 表示选择了点 iii 的最小剩余体积,显然 f(i)=−in(i)+min⁡jf(j)+out(j)f(i) = -in(i) + \min_{j} f(j) + out(j)f(i)=−in(i)+minj​f(j)+out(j),后面的东西

2021-10-08 10:34:11 119

原创 [PKUWC2018]Minimax 题解

P5298 [PKUWC2018]Minimax2021.10.82021.10.82021.10.8 重新自己写出这题。其实不要想太复杂就好了,别忘了看题面。先给一个提示吧,为什么这题的 DpDpDp 不用融斥掉中间的部分,题目已经说出来了:没有重复权值的叶子。首先考虑对于每一个节点的值最多只有 n 个,所以肯定需要离散化。之后考虑实际上每一个节点的值都是从其子树的叶子节点中转移过来的。所以考虑树形 Dp设 f[i][j]f[i][j]f[i][j] 表示在树上点 iii 其值

2021-10-08 09:10:48 181

原创 P3412 仓鼠找sugar II 题解

P3412 仓鼠找sugar IIP3412 仓鼠找sugar II根据期望的线性性质我们考虑对于每一条边进行计算贡献。我们可以考虑先算方案数再除以总的点对。根据期望的定义本质上就是平均数,那么对于一条边 u→vu \to vu→v 的贡献次数就是 (n−siz(u))×siz(u)(n - siz(u)) \times siz(u)(n−siz(u))×siz(u)。我们考虑一条边有两种情况:向上向下我们钦定点 uuu 表示 fa(u)→ufa(u) \to ufa(u)→u 的边

2021-10-07 18:59:28 96

原创 [HNOI2013]游走 题解

[HNOI2013]游走[HNOI2013]游走考虑每一条边的单独贡献,发现这个不是很好计算,而且边数其实很多。我们考虑对于一条 u→vu \to vu→v 的边,其贡献是 f(u)deg(u)+f(v)deg(v)\dfrac{f(u)}{deg(u)} + \dfrac{f(v)}{deg(v)}deg(u)f(u)​+deg(v)f(v)​。其中 f(i)f(i)f(i) 表示点 iii 期望被经过的次数,别忘了一开始点 111 就被经过一次了。考虑走到别的点之后再走回来更新这个点:f

2021-10-07 15:57:02 141

原创 [HNOI2015]亚瑟王 题解

[HNOI2015]亚瑟王[HNOI2015]亚瑟王根据期望的线性性质,我们考虑每一张牌的贡献。也就是每一张牌被使用的概率。显然第一张牌使用的概率就是 1−(1−p1)r1 - (1 - p_1) ^ r1−(1−p1​)r。但是发现之后的牌的使用依赖于前面的牌的使用,因为如果前面有 jjj 张牌被使用了,相当于有 jjj 轮对于当前牌是无效的。我们考虑进行 dp\tt dpdp,设 f(i,j)f(i, j)f(i,j) 表示前 iii 张使用了 jjj 张牌的概率。f(i,j)={f(i

2021-10-07 14:03:08 242

原创 [六省联考2017]分手是祝愿 题解

[六省联考2017]分手是祝愿[六省联考2017]分手是祝愿对于每一种情况,我们肯定是从大到小依次进行操作,那么对于一次操作是不能用其他操作进行代替的。如果可以代替要么代替的那个变得不合法,要么其本身就是不用进行操作的。所以我们可以直接计算出来原来序列需要进行多少次方案。根据期望的线性性,而且现在本质上只和操作正确的次数有关,我们直接对于有几个还要操作进行 Dp\tt DpDp。设 f(i)f(i)f(i) 表示从还有 iii 个需要进行操作到 i−1i - 1i−1 个需要的期望步数

2021-10-07 10:48:41 108

原创 全局平衡二叉树 P4751 【模板】“动态DP“

全局平衡二叉树 P4751 【模板】"动态DP"P4751 【模板】“动态DP”&动态树分治(加强版)有事没事就用 vector\tt vectorvector 总会有天废掉的。注意在 c++11\tt c++11c++11 之后 vector\tt vectorvector 不管是是否在 O2O2O2 的条件下,速度都比常规数组慢很多,甚至比链表要慢 444 倍。死亡写法:struct Tree : vector<vector<int>> {

2021-10-01 21:29:11 152

原创 CF1559D2 Mocha and Diana (Hard Version) 题解

CF1559D2 Mocha and Diana (Hard Version)CF1559D2 Mocha and Diana (Hard Version)做过 /qd暴力就是直接枚举每条边是否被加入。证明一下这个东西:如果说存在有一条边不被加入,然后可以多增加两条边。那么增加的两条边肯定是连接了 333 个连通块,而断掉一条边只能产生 222 个连通块,说明肯定有一个连通块之前没有加入,和最优秀的情况矛盾,所以成立。那么根据之前这个结论我们直接进行暴力加边即可。我们发现对于最终的情

2021-10-01 08:43:59 106

原创 CF449C Jzzhu and Apples 题解

CF449C Jzzhu and ApplesCF449C Jzzhu and Apples肯定会想到偶数肯定需要来匹配的,之后发现对于奇数的情况,对于每一个奇数肯定都是若干个质数的倍数。那么越大的质数越难被匹配,我们考虑从大到小对于质数进行考虑。对于当前质数 ppp 找到所有没有被匹配过的数,如果有偶数个直接进行匹配即可,不然的话肯定需要舍弃一个数,发现 222 是一个质数,那么我们舍弃一个 222 的倍数即可。这样可以发现匹配到最后我们最多舍弃一个数,不可能更优了。...

2021-10-01 08:19:24 114

原创 CF1375E Inversion SwapSort 题解

CF1375E Inversion SwapSortCF1375E Inversion SwapSort发现逆序对不是很好入手,考虑最终构成的序列是单调递增的情况。不妨考虑这是一个排列的情况。显然离散化一下答案不会改变。发现 nnn 肯定是在最后面,那么对于一开始的序列我们不妨考虑将 nnn 放到最后面之后转化成一个子问题。那么对于一个合法的子问题,我们必须保证对于原来 au<ava_u < a_vau​<av​ 的情况,还有 au<ava_u < a_va

2021-10-01 07:58:04 122

原创 CF1380D Berserk And Fireball 题解

CF1380D Berserk And FireballCF1380D Berserk And Fireball其实不能算一个构造题,主要难在代码实现。考虑每一个区间,对于这个区间选择一个最优的方法删除即可。显然我们考虑用当前区间最大的数去删除其他的数,之后再将其删除即可。#include <bits/stdc++.h>using namespace std;//#define Fread//#define Getmod#ifdef Freadchar buf[1

2021-09-30 20:07:23 67

原创 CF1391D 505 题解

CF1391D 505CF1391D 505直接粗略看去没有什么可以入手的地方,考虑什么时候是不合法的。发现样例给出了 7,157, 157,15 的时候是不合法的。考虑手造几组小样例,发现如果一个大的平方矩阵恰好包含偶数个小的平方矩阵就是不合法的。考虑 a2=k×b2a^2 = k\times b^2a2=k×b2 直接暴力带入一下 b=2b = 2b=2 的情况,发现 a=4,k=4a = 4, k = 4a=4,k=4。那么显然对于 n>3,m>3n > 3, m &g

2021-09-30 15:29:42 99

原创 GCJ2015 还原集合 题解

GCJ2015 还原集合提交地址找不到 /qd。假设说我们知道一个数 x,x>0x, x > 0x,x>0 我们考虑对其进行背包,不妨假设上一个背包的数组为 fff。发现对于一个新的数组位置 iii 会对应 i−x,xi - x, xi−x,x 两个位置。然后考虑一下 x,x<0x, x < 0x,x<0 的情况,位置 iii 会对应 x,i+xx, i + xx,i+x 两个位置。发现本质上还原的两个位置只相差了 xxx,所以我们最后还原出来的数列也只是

2021-09-30 14:50:21 192

原创 CF1416B Make Them Equal 题解

CF1416B Make Them EqualCF1416B Make Them Equal论我脑子有点问题这一事。发现如果 i=1i = 1i=1 这个肯定是很好做的,我们考虑将每个数都放到位置 111 上,每个数最多被使用 333 次,所以复杂度是 O(3(n−1))O(3(n - 1))O(3(n−1))。我们具体来说,对于一个位置 jjj,如果 j∣ajj | a_jj∣aj​ 显然我们直接将其放到位置 111 上即可,不然的话我们考虑将这个位置补齐即可。我们考虑通过归纳法证明这个

2021-09-30 14:07:45 137

原创 CF1385E Directing Edges 题解

CF1385E Directing EdgesCF1385E Directing Edges题目描述:给定一个图,有无向边和有向边。对于无向边进行定向,问能否给出一个方案使得定向后的图是无环的,图不一定要联通。我们先不考虑无向边,对于有向边组成的图,不妨进行一次拓扑排序找到每一个节点遍历的先后顺序。我们先判掉有环的情况,也就是存在一条边 u→vu \to vu→v 而且点 uuu 的遍历时间比 vvv 要晚。之后考虑我们肯定可以构造出一种合法的图,也就是对于所有的无向边我们考虑连接的两个几

2021-09-30 07:49:19 138

原创 课后练习

CF1182E Product Oriented Recurrence佳佳的 FibonacciCF575A Fibonotci

2021-09-28 21:41:09 82

原创 LOJ #2269. 「SDOI2017」切树游戏 题解

LOJ #2269. 「SDOI2017」切树游戏#2269. 「SDOI2017」切树游戏没错我在某谷被卡掉了,之后会了全局平衡二叉树再更新那个做法。不考虑修改怎么做。设 f(i,j)f(i, j)f(i,j) 表示以 iii 为根的子树(必须包含点 iii)异或值为 jjj 的方案数, G(i,j)G(i, j)G(i,j) 以 iii 为根的子树的答案。考虑更新。对于上一个答案 f′(i,j)f'(i, j)f′(i,j) 当前儿子 vvv 可以更新得到:f(i,j)=∑j=k⊗x

2021-09-28 18:33:30 299

原创 CF1344B Monopole Magnets 题解

CF1344B Monopole MagnetsCF1344B Monopole Magnets多打 CFCFCF 你也会懂一点英语。笔者很菜,入手点是没有找到。就是考虑南磁铁不行的话,我们可以考虑一下两个黑色的格子的关系。也就是说如果这两个在同一个行的话,那么可以考虑到两个格子到当前行的南磁铁路径上肯定都是黑色的。那么我们考虑是否会存在两个南磁铁的情况,如果存在那么肯定是为了处理有两段黑色的情况,但是下面的南磁铁同样是可以吸引上面的北磁铁,那么这种情况肯定是不行的。所以可以得出第一个限

2021-09-28 15:59:15 114

原创 POJ 3613 Cow Relays 题解

POJ 3613 Cow RelaysPOJ 3613 Cow Relays真心想吐槽一下,这个不能用 111111 真的挺难受的。首先看去像一个板子题,之后发现如果直接对于每个点建图的话时间是过不了的。之后发现边的数量其实不是很多,一条边最多只有两个不同的点,所以实际上有用的点数是 2m+22m + 22m+2 个。我们对于这个直接进行矩阵快速幂即可。其实还有一个稍微难写一点的方法,我们考虑对于每一条边建立矩阵,之后如果两条边能互相到达就赋值为其权值,具体来说是 i→j,j→zi \to

2021-09-27 10:55:36 80

原创 SP1716 GSS3 - Can you answer these queries III 题解

SP1716 GSS3 - Can you answer these queries IIISP1716 GSS3 - Can you answer these queries也真是服了,浪费几分钟来搞这种题目。直接线段树维护一下端点信息即可,具体来说就是左右端点的权值最大值,答案还有区间权值和。#include <bits/stdc++.h>using namespace std;//#define Fread//#define Getmod#ifdef Fread

2021-09-26 15:18:13 114

原创 论动态 Dp

SP1716 GSS3 - Can you answer these queries III #2269. 「SDOI2017」切树游戏说实在的这种码量还是少写吧,之后要以构造题为主

2021-09-26 14:58:18 133

原创 CF498E Stairs and Line 题解

CF498E Stairs and LinesCF498E Stairs and Lines肯定是状压,而且状压的就是轮廓线,我们考虑同时状压横着和竖着的情况。然后肯定需要进行矩阵快速幂复杂度还是很高的。但是我们考虑我们当前位置和之前位置进行转移的时候使用的是竖着的线,而且横着的线仅仅在当前转移出现了,意味着肯定不会影响后面的计算。那么我们不妨枚举轮廓线,这样复杂度就是直接少了 2732^{7^3}273。然后说几个细节,具体状态转移就自己推吧。我的写法是考虑当前位置和后面位置的衔接,对于也就是

2021-09-25 20:43:36 90

原创 [HNOI2002]公交车路线 题解

[HNOI2002]公交车路线[HNOI2002]公交车路线这题和没有一样。直接按照题意建立转移矩阵即可。笔者的答案矩阵是:[fAfBfC…fH]\left[\begin{matrix}f_{A} & f_B & f_C & \dots & f_H\end{matrix}\right][fA​​fB​​fC​​…​fH​​]其中 fif_ifi​ 表示经过了 nnn 次操作从 AAA 走到 iii 的方案数。不妨设转移矩阵为 GGG。那么对于

2021-09-25 19:50:22 166

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除