01 2025 档案
摘要:问题显然可以分为两部分:\(u\) 的子树内和 \(fa_u\) 到 \(v\) 的链上。前者需要树上背包,后者需要取 \(\max\)。 考虑用线段树维护这两个值。子树内的答案只需要一次区间查询,再加上树上背包的 \(O(m^2)\),总共为 \(O(m^2\log n)\)。链上的答案需要进行树
阅读全文
摘要:A. Min-Fund Prison (Medium) 考虑一个边双连通分量一定不可能分为合法的两部分,于是进行缩点。缩完后显然是一个森林。 设 \(dp_{i,j,0/1}\) 表示第一堆有 \(i\) 个点,第二堆有 \(j\) 个点,两堆点有没有用一条边连起来的最小花费。对于每棵树,考虑将它加
阅读全文
摘要:A. 牛场围栏 首先判断 -1 的情况。 如果可用的长度中有 \(1\),那么所有长度都能拼出来。 如果所有可用长度的 \(gcd\) 不为 \(1\),那一定没有最大值。 证明:设 \(gcd\) 为 \(q\),则 \(q\mid x_1a_1+x_2a_2+\dots+x_na_n,x_1,x
阅读全文
摘要:简单手摸后发现,答案就是这么一个式子: \( (3^{n-1}-3^{n-2})a_1+(3^{n-2}-3^{n-3})a_1a_2+\dots+(3^1-3^0)a_1a_2\dots a_{n-1}+a_1a_2\dots a_n \) 啊当然证明也是好证的,对于 \(a_1\) 这一项,它后
阅读全文
摘要:A. 「SDOI2014」旅行 给每个宗教开一棵线段树,树剖 \(+\) 线段树单点修改区间查询即可。需要动态开点。 Code #include<bits/stdc++.h> #define ll long long #define il inline #define read(x){\ char
阅读全文
摘要:A. 「NOIP2009」靶形数独 暴搜。 本着搜索必剪枝的思想,略微做一点优化:优先搜索 \(0\) 少的行。 然后就搜就行。 Code #include<bits/stdc++.h> #define ll long long #define il inline using namespace s
阅读全文
摘要:A. Arpa's weak amphitheater and Mehrdad's valuable Hoses 用并查集将每个朋友圈找出,然后 DP。 设 \(dp_{i,j}\) 表示前 \(i\) 个朋友圈,重量为 \(j\) 的最大美丽度。转移分为从这个朋友圈中选一个转移、用这个朋友圈的和转
阅读全文
摘要:前言 本来早就该学笛卡尔树了,但暑假打模拟赛就一直没学成。于是就打算先不学了,结果又发现后面有个笛卡尔树专题,只好来学学。 定义 笛卡尔树是一棵二叉树,每个点有一个键和一个值,键满足堆的性质,值满足二叉搜索树的性质。没错当键随机时,这就是个 Treap。 建树 如果值单调递增,那么就可以线性建树。具
阅读全文
摘要:记 \(f(x)\) 为最小的大于 \(x\) 的 \(y\),使得 \(x\) 是 \(y\) 的子串。易得: \[f(x)=\min(10x,x+10^{|x|}) \]其中 \(|x|\) 表示 \(x\) 的位数。 可以发现,\(f(x)\) 为一个严格单调递增的函数。 考虑贪心策略,显然选
阅读全文
摘要:注:题解中 \(\operatorname{lsh}\),\(\operatorname{rsh}\),\(\operatorname{or}\) 分别表示按位左移、按位右移、按位或,即 c++ 语言中的 <<,>>,|。 我也是打上轮廓线 DP 了。 设 \(f_{x,y,S}\) 表示当前在 \
阅读全文