随笔分类 - 题库—BZOJ
摘要:题意 "题目链接" Sol 直接挂队爷的题解了 分块题好难调啊qwq cpp include define LL long long using namespace std; const int MAXN = 1e6 + 10; const LL INF = 6e18; template inlin
阅读全文
摘要:题意 "题目链接" Sol 树的同构问题,直接拿hash判一下,具体流程大概是这样的: 首先转化为有根树,预处理出第$i$棵树以$j$为根时的hash值。 那么两个树同构当且仅当把两棵树的hash数组排完序后完全一致(感性理解一下) cpp / / include define Pair pair
阅读全文
摘要:题意 "题目链接" Sol 直接上动态开节点线段树 因为只有一次询问,所以中途不需要下传标记 cpp include define LL long long using namespace std; const int MAXN = 8e6 + 10, INF = 1e9 + 10; templat
阅读全文
摘要:题意 "题目链接" Sol 一个显然的思路是维护最大最小值以及最大最小值的覆盖标记。 https://paste.ubuntu.com/p/WXpBvzF6Y2/ 但实际上因为这题只需要输出最后的操作序列,那么我们只维护最大最小值的覆盖标记即可。 也就是对于每一个节点,把本层的最大最小值下传之后清除
阅读全文
摘要:题意 "题目链接" Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 cpp include define LL long long using namespace std; const int MAXN = 2e6 + 10; inline int read() {
阅读全文
摘要:题意 "题目链接" Sol 单调栈板子题。。 找到向左第一个比他大的位置,然后判断一下就可以了 cpp include // define int long long define LL long long using namespace std; const int MAXN = 1e6 + 10
阅读全文
摘要:题意 "题目链接" Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 cpp // luogu judger enable o2 include define LL long long using namespace std; const int MAXN = 4e6
阅读全文
摘要:题意 "题目链接" Sol 介绍一种神奇的点分治的做法 啥?这都有根树了怎么点分治?? 嘿嘿,这道题的点分治不同于一般的点分治。正常的点分治思路大概是先统计过重心的,再递归下去 实际上一般的点分治与统计顺序关系不大,也就是说我可以先统计再递归,或者先递归再统计。 但是这题不单单是统计,它是dp,存在
阅读全文
摘要:题意 "题目链接" Sol 重新看了一遍斜率优化,感觉又有了一些新的认识。 首先把土地按照$(w, h)$排序,用单调栈处理出每个位置第向左第一个比他大的位置,显然这中间的元素是没用的 设$f[i]$表示买了前$i$块土地的最小花费 $f[i] = min_{j = 0}^{i 1}(f[j] +
阅读全文
摘要:题意 "题目链接" Sol 最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求 设$f[i]$表示以$i$结尾的最长路长度,$g[i]$表示以$i$开始的最长路长度 根据DAG的性质,显然我们删除一个点后,整个集合会被分成两部分:拓扑序小于/大于当前点 那么此时的最长路一定可以通过计算连
阅读全文
摘要:题意 "题目链接" Sol $30 \%$dp: $f[i][j]$表示放了$i$个$1$和$j$个$0$的不合法方案
阅读全文
摘要:题意 "题目链接" Sol 前面的可以直接算 然后原串翻转过来,这时候变成了求任意两个前缀的最长公共后缀,显然这个值应该是$len[lca]$,求出$siz$乱搞一下 cpp include define int long long define LL long long using namespa
阅读全文
摘要:题意 "题目链接" Sol 直接在SAM上乱搞 枚举前缀,用SAM统计可以匹配的后缀,具体在匹配的时候维护和当前节点能匹配的最大值 然后再把parent树上的点的贡献也统计上,~~这部分可以爆跳parent树~~(假的,因为这题数据随机),也可以直接树形dp一波记下每个点被统计的次数 cpp inc
阅读全文
摘要:题意 "题目链接" Sol "杜教筛" 板子题。。 include define LL long long using namespace std; const int MAXN = 1e7 + 10; inline int read() { char c = getchar(); int x =
阅读全文
摘要:题意 "题目链接" Sol 看完题不难想到最小路径覆盖,但是带权的咋做啊?qwqqq 首先冷静思考一下:最小路径覆盖 = $n \text{二分图最大匹配数}$ 为什么呢?首先最坏情况下是用$n$条路径去覆盖(就是$n$个点),根据二分图的性质,每个点只能有一个和他配对,这样就保证了,每多出一个匹配
阅读全文
摘要:题意 "题目链接" Sol 不会做Orzzzz 想到了和题解一样的方程,但是根本不会转移 具体题解看 "这里" 吧 大致思路就是先推一波性质,然后对于最后一个位置上的数$i$,分两种情况讨论一下:与$i 1$相邻 / 不相邻, cpp include define chmin(x, y) (x =
阅读全文
摘要:题意 "题目链接" Sol 首先一个很显然的思路是直接用$f[i][j] / g[i][j]$表示$i$的子树中选了$j$个节点,该节点是否选的最小权值。但是直接这样然后按照树形背包的套路转移的话会有一种情况无法处理,就是说该节点不选,儿子节点也不选,这样我们就不清楚儿子节点的子节点的贡献了 一种暴
阅读全文
摘要:题意 "题目链接" Sol 下面是错误做法,正解请看 "这里" 考虑直接用K D tree模拟。。 刚开始想的是维护矩形最大最小值,以及子树中最大圆的位置,然后。。。 实际上最大圆的位置是不用维护的,直接把原序列排一遍序就可以了 再努力卡卡常就过了 如果还过不了的话可以尝试把所有点都转一个角度 cp
阅读全文
摘要:题意 "题目链接" Sol 直接考虑点分治+hash匹配 设$up[i]$表示$dep \% M = i$的从下往上恰好与前$i$位匹配的个数 $down$表示$dep \% M = i$的从上往下恰好与后$i$位匹配的个数 暴力转移即可 复杂度:$O(nlog^2n)??$ 代码写起来有一车边界
阅读全文
摘要:题意 "题目链接" Sol NOI的题都这么良心么。。 先交个$n^4$暴力 = 75 hash优化一下 = 90 然后$90$到$100$分之间至少差了$10$难度台阶= = $90$分的暴力hash就比较trival了。 考虑怎么优化。 显然我们只要找出所有形如$AA$的字符串就行了,设$pre
阅读全文

浙公网安备 33010602011771号