洛谷传送门 思路 考虑将图往左压正,就得到了一个直角三角形的图。 在这个图中,如果没有斜边,则任意时刻走的向下的边都要 \(\ge\) 向右的边。这一部分就是 [SCOI2010] 生成字符串 了。 现在有斜边,考虑枚举走斜边的次数,设 \(u_i\) 为第 \(r\) 行第 \(c\) 列的点,走斜边的次数为 \(k\),那
P8110 [Cnoi2021]矩阵 [传送门]:[https://www.luogu.com.cn/problem/P8110] 题解 分析 以样例1为例: 3 01 2 34 5 6 根据题意,A_{ij}=a_i\times b_j,很容易得到: $$A= \begin{bmatrix} 4&5&6\\ 8&10&12\\ 12&15&18\\ \end{bmatrix}$$ 诶,有没有发现一个特殊的性质? 矩
这题一眼dp,设 \(dp_{i,j}\) 表示 到第 \(i\) 天,手里还有 \(j\) 张股票时的最大收益,那么一共分四种情况: 购买分两种: 当本次购买是第一次购买时,\(dp_{i,j}=-AP_i\times j\)。 当本次不是第一次购买时,\(dp_{i,j}=\max\{dp_{i-w-1,j-k}-k\times AP_i\}\ \ k\in [j,AS_i]\)。 但是我们
洛谷传送门 一道线段树维护区间前缀最大值个数的好题。 思路 易得连接 \((0,0),(i,H_i)\) 的线段斜率为 \(s_i = \frac{H_i}{i}\)。则题要求的就是满足 \(i \in [1,n], s_i > \max\limits_{j=1}^{i-1} s_j\) 的 \(i\) 的个数。考虑线段树维护。 线段树上每个结点维护当前区间 \([l
瑰丽华尔兹 \(dp\) + 单调队列优化 \(dp[k][i][j]\) 表示在第 \(k\) 次倾斜后 \(x = i\) 且 \(y = j\) 的位置上,能够滑动的最长距离,第一纬可以直接用滚动数组消除 显然每次倾斜都要对所有的状态进行更新,分四个方向进行更新,以向右滑动为例,有状态转移方程: \[dp[i][j] = \max_{k=t-j}
A-B 数对 [P1102] 题目描述 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及一个数字 \(C\),要求计算出所有 \(A - B = C\) 的数对的个数(不同位置的数字一样的数对算不同的数对)。 输入格
又要学定义了,有点糟心…… 新知详解 包括最大权闭合图与最大密度子图。 最大权闭合图 闭合图是有向图的一个点集,满足任何一个点的出边指向的点都属于这个点集中,也就是说出边不能跨集合。点集与点所连的边合称为闭合子图。 下图展示的例子中, \((1,3),(2,3),(1,2,3)\) 都不能构成一
题目传送门:https://www.luogu.com.cn/problem/P2024 一般的并查集只能用来解决”亲戚的亲戚是亲戚“这类问题,但是如果关系变得复杂就不好解决。 比如”敌人的敌人是朋友“这类的问题,很明显普通的并查集无法解决,这个时候我们就要用到普通并查集的进阶版——种类并查集。 一般的
洛谷题面传送门 一道很烦的网络流题,代码每一块的结构都很清晰,但是拼起来就让人觉得很烦…… 首先此题的一大难点在于读题,我一开始傻傻地以为散点没有用,心想这题不是 sb 状压 dp 吗,后来才发现是自己都错题了……事实上本题正确的题意如下: 对于血缘链上的点,任何一条链上的第 \(j\)
这是本人博客。洛谷的博客仅拿来发表题解。主要是我不喜欢发一篇博客就会被别人知道,但又由于某些原因不想关犇犇,于是转移了阵地。还有就是博客园有自带的相册,比洛谷的图床方便一些。 本人是全天下最弱的蒟蒻,不接受任何反驳。 蒟蒻拥有坎坷的OI学习经历,初一才开始学习语言,下学期由
题目背景 借助反作弊系统,一些在月赛有抄袭作弊行为的选手被抓出来了! 题目描述 现有 2^n\times 2^n (n\le10)2n×2n(n≤10) 名作弊者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定赦免一些作弊者。他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原
原题链接 题意 一家餐厅有 \(n\) 道菜,编号 \(1,2,...,n\) ,大家对第 \(i\) 道菜的评价值为 \(a_i\)。有 \(m\) 位顾客,第 \(i\) 位顾客的期望值为 \(b_i\),而他的偏好值为 \(x_i\)。因此,第 \(i\) 位顾客认为第 \(j\) 道菜的美味度为 \(b_i\,\,xor\,\, (a_j+x_i)\),\(xor\) 表示异或运
洛谷题面传送门 简单分块题,可惜卡了一年的常( 道理很明显,碰到这种不可 polylog 维护的题肯定需要分块,弱化版可见 P3591 POI2015 ODW。而此题又涉及开根号,那又一个一眼的套路:segment beats,这样做法就出来了:设阈值 \(B\),然后。 对于 \(k>B\),查询修改都暴力。 对于 \(k\le B\),我们先
CF 800-1600 模拟、贪心、数学、DP(先这么几个 并查集 836. 合并集合 - AcWing题库 P3367 【模板】并查集 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) P1551 亲戚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 837. 连通块中点的数量 - AcWing题库 P3958 [NOIP2017 提高组
树上操作 树链剖分模板 - 子树区间加和 考虑到树链剖分的时候,一颗子树内的 dfn 序一定是连续的一段区间,因此只要找到子树内最大的 dfn 序即可,也就是树链剖分 dfs 的时候回到当前结点时,记录一下当前分配 dfn 序分配到了哪个值 然后直接线段树区间加和即可 #include <iostream> #inc
题目: 洛谷地址:https://www.luogu.com.cn/problem/P2002 分析: 简单读题后可以想到: 一,tarjan对图进行缩点。 二,求入度为0的点的个数即为答案。 简单的对步骤二的证明: 对于每一个点,如果入度>0,那么它可以从其他点得到消息,当入度为0时,则没有可以给
松鼠的新家 树上差分模板题 - 点差分 #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; const int maxn = 3e5 + 10; int val[maxn], dep[maxn], fa[maxn][25], a[maxn]; vector<int>gra[maxn]; void dfs
洛谷题面传送门 简单题,不知道怎么评到黑的.jpg 首先拆贡献。看到仙人掌套路化分环边和非环边处理。非环边贡献非常 easy,只要两边都有点被选即可。主菜在环边。 每个环显然是独立的。我们假设现在在考虑一个由 \(p_1,p_2,\cdots,p_k\) 构成的环,那么我们考虑以这个环为根建树,显然每
洛谷题面传送门 肿么没有人证明复杂度,那我来证一个。 考虑分治,每次像猫树那样处理一个分治区间 \([l_x,r_x],[l_y,r_y]\) 表示当前处理 \(x_1,x_2\in[l_x,r_x]\),\(y_1,y_2\in[l_y,r_y]\) 范围内的所有询问。处理当前层的询问是好办的,考虑令 \(mid=\lfloor\dfrac{l_x+r_x}{2}\rfloo
我和Codefroces的题就这么过不去 题目传送门 既然题目用hump,那我们就称a[i-1]<a[i]>a[i+1]的峰,反之为谷。 这道题是一道紫,但我认为这个紫仅是针对那些优化,其实它用五维DP没有问题,对于五维dp,是个绿就不错。 设dp[pos][up][down][pre][num],pos表示当前遍历到了哪个数,可以看做下标,u
思路 直接 dfs 一遍。 首先,一个子树内的点都是一遍 dfs 到的,那么直接差分一下,到达 \(u\) 的时候记录当前的 \(>p_u\) 的个数,然后 dfs 完 \(u\) 的子树的时候,记录 \(>p_u\) 的个数,相减即为 \(u\) 的答案。 代码 #include<bits/stdc++.h> using namespace std;typedef long long ll;
晚上abc的G题考到了,听说是典中典 搞了一下O(m*sqrt(m))的写法 但是在atcoder超时,明天补bitset的写法 时间复杂度的证明 使用bitset的题解 #include<bits/stdc++.h> using namespace std; #define fr first #define se second #define et0 exit(0); typedef long long LL; type
这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的。但这种正向找是错误的,题目要求的是小的节点尽量往前,并不是字典序最小。<i,j>中i肯定大于j,这样建的图中小的节点是靠后的,当然不行;那我们考虑反向建图,那么小的节
【模板】最近公共祖先(LCA) 倍增 lca 模板 真心觉得二进制太奇妙了 #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; #define endl '\n' const int maxn = 5e5 + 10; vector<int>gra[maxn]; int fa[maxn
如果爬虫这都要爬的话 nmsl 该博客不发布与 OI 相关的内容(题解、比赛游记等),需要的话移步 洛谷博客 博文全部都设置密码,密码见洛谷博客里的闲话目录