摘要:
【题意】给定n棵高度初始为0的草,每天每棵草会长高a[i],m次收割,每次在d[i]天将所有>b[i]的草收割到b[i],求每次收割量。n<=500000。 【算法】线段树上二分 【题解】按照生长速度a[]排序后,容易发现数列永远单调。 在线段树上的区间维护以下值: 1.最后一棵草的高度a 2.上次 阅读全文
摘要:
【题意】给定n个数字ai,每次询问一个区间中随机抽选两个数字,数字相同的概率,以分数最简形式输出。n,ai<=50000。 【算法】莫队算法 【题解】参考:莫队……讲稿? by Foreseeable 使用莫队算法的关键在于维护区间信息的增减。 对于区间[L,R],令其中数字i的出现次数为xi,则a 阅读全文
摘要:
【题意】给定n个物品,价值为$a_i$,物品价格互不相同,求选一个或两个或三个的价值为x的方案数,输出所有存在的x和对应方案数。$ai<=40000$。 【算法】生成函数+FFT 【题解】要求价值为x的方案数,就定义价值为“大小”(即指数),方案数为“元素个数”(即系数),物品为“选择项”(即多项式 阅读全文
摘要:
【参考】「ZJOI2014」力 - FFT by menci 【算法】FFT处理卷积 【题解】将式子代入后,化为Ej=Aj-Bj。 Aj=Σqi*[1/(i-j)^2],i=1~j-1。 令f(i)=qi,g(i)=1/i^2,定义f(0)=g(0)=0(方便卷积)。 Aj=Σf(i)*g(j-i) 阅读全文
摘要:
【题意】请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。 【算法】快速傅里叶变换(FFT)处理卷积 【题解】题目要求: $$C_k=\sum_{i=k}^{n-1}A_i*B_{i- 阅读全文
摘要:
【快速傅里叶变换】FFT 参考:从多项式乘法到快速傅里叶变换 by miskcoo FFT 学习笔记 by Menci (一)多项式的表示法 系数表示法:f(x)=a[n-1]*x^(n-1)+...+a[0],称为n-1次多项式。 点值表示法:一个n-1次多项式在复数域中有n个根,即n个(x,y) 阅读全文
摘要:
【题目】E. Palindromes in a Tree 【题意】给定一棵树,每个点都有一个a~t的字符,一条路径回文定义为路径上的字符存在一个排列构成回文串,求经过每个点的回文路径数。n<=2*10^5。 【算法】点分治 【题解】状压20位的二进制表示一条路径的字符状态,点分治过程中维护扫描过的路 阅读全文
摘要:
【题意】给定带边权树,求两点距离<=k的点对数。n<=40000。 【算法】点分治 【题解】对于一个区域,选择其重心x作为根,则划分出来的每棵子树都是子区域,可以证明至多划分log n次(通过vis[]划分区域)。每次划分所有点都扫描一次,所以仅遍历的复杂度是O(n log n)。 对于本题,将点x 阅读全文
摘要:
【题意】给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000。注意点从0开始编号,无解输出-1。 【算法】点分治 【题解】每个区域按重心x划分子树,一条经过x的路径是从一个子树到另一个子树的(从x出发记为深度0即可),那么就让子树i的 阅读全文
摘要:
【题意】给定a,b,c,在天平左边放置若干重量a的砝码,在天平右边放置若干重量b的砝码,使得天平两端砝码差为c。设放置x个A砝码和y个B砝码,求x+y的最小值。 【算法】数论(扩展欧几里德算法) 【题解】问题转化为求满足方程ax+by=c,|x|+|y|的最小值。 先用扩展欧几里得算法求得通解。 由 阅读全文
摘要:
【参考】 ★仙人掌相关问题的处理方法(未完待续) ★WC2017-immortalCO Making Graph into Trees 【DFS树】 仙人掌图:每条边至多在一个环上的图。 仙人掌图中每个环相当于一个点双连通分量,那么用Tarjan算法处理dfs树。 对于树边(low[y]>dfn[x 阅读全文
摘要:
【题意】给定带边权仙人掌图,Q次询问两点间最短距离。n,m,Q<=10000 【算法】圆方树处理仙人掌问题 【题解】树上的两点间最短路问题,常用倍增求LCA解决,考虑扩展到仙人掌图。 先对仙人掌图建圆方树,圆圆边和原图边权一致。对于每个方点代表的环,记深度最小的点为x,则圆方边的边权是圆点到x的最短 阅读全文
摘要:
【题意】给定仙人掌图,求最大独立集(选择最大的点集使得点间无连边)。n<=50000,m<=60000。 【算法】DFS处理仙人掌图 【题解】参考:【BZOJ】1023: [SHOI2008]cactus仙人掌图 对仙人掌进行无向图的点双连通分量Tarjan算法,树边正常DP,环边(low[y]<= 阅读全文
摘要:
【题意】给定01矩阵,求最大全1子矩阵。n,m<=1000。 【算法】动态规划(悬线法) 【题解】★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点x唯一对应了一个极大子矩阵,那么至多有n*m个极大子矩阵,而最大子矩阵一定是极大子矩阵,故求解复杂度O(n 阅读全文
摘要:
【题意】给定仙人掌图(每条边至多在一个简单环上),求直径(最长的点对最短路径)。n<=50000,m<=10^7。 【算法】DFS树处理仙人掌 【题解】参考:仙人掌相关问题的处理方法(未完待续) 对仙人掌建立DFS树,参考无向图的点双连通分量Tarjan算法,在访问x时容易知道边(x,y)是否属于一 阅读全文
摘要:
【题目】C. Centroids 【题意】给定一棵树,求每个点能否通过 [ 移动一条边使之仍为树 ] 这一操作成为树的重心。n<=4*10^5。 【算法】树的重心 【题解】若树存在双重心,则对于任何一个点将另一边的n/2个点取下来接上去即可,均成立。 若树为单重心,假设w为树的重心及根,x为当前考虑 阅读全文
摘要:
【题目】D. Animals and Puzzle 【题意】给定n*m的01矩阵,Q次询问某个子矩阵内的最大正方形全1子矩阵边长。n,m<=1000,Q<=10^6。 【算法】动态规划DP+二维ST表 【题解】设f[i][j]为以(i,j)为右下角的最大正方形全1子矩阵。 f[i][j]=min{ 阅读全文
摘要:
【题目】C. Sonya and Problem Wihtout a Legend 【题意】给定n个数字,每次操作可以对一个数字±1,求最少操作次数使数列递增。n<=10^5。 【算法】动态规划+前缀和优化 【题解】★令b[i]=a[i]-i,则a[i]递增等价于b[i]不递减。 这样做之后,显然数 阅读全文
摘要:
【题意】给定n个人的ai和bi,表示第i个人能力值为ai且不能和bi同时选择,求能力值和最大的选择方案。n<=10^6。 【算法】环套树DP(基环树) 【题解】n个点n条边——基环森林(若干环套树子图)。 若原图是树,经典DP做法:f[i][0/1]表示i点选或不选的最大能力值和,则f[i][0]= 阅读全文
摘要:
【题目】B. Recover the String 【题意】找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在。数字<=10^9,答案<=10^6。 【算法】数学构造 【题解】首先由a1和a4易得0的数量x0和1的数量x1。 容易发现0 阅读全文