摘要:
【原题题面】传送门 【题解大意】 乍一看感觉以为网络流表示一点都不会不会不会。 然后发现可以树形dp搞一下。 再然后知道了换根dp。 设d[x]表示以x为根的子树中把x做为源点,从x出发流向子树的流量最大是多少。 d[x] += min(d[y],z);(deg[y]!=1) d[x] = z; ( 阅读全文
摘要:
【原题题面】 【luogu 3146】248传送门 【luogu 3147】262144传送门 【题面大意】 给定一个1*N(2<=N<=248/262144) 的地图,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。 【题解 阅读全文
摘要:
题目条件 给定一些区间(n)的左右端点,在整数集合上进行覆盖。 【水题一】 双倍经验提交来这里。 求被覆盖次数不少于给定次数的段(定义为数轴上相邻两整数之间的距离为一段)有多少个。 解法一: 试图用map水过,map的建值对表示在当前值上被覆盖的次数,利用差分,实际是扫描线的思想在里面了,无需离散化 阅读全文
摘要:
【原题题面】传送门 【题解大意】 *衡树模板题。 左旋右旋使数尽量满足左右子树相当的情况。 随机化权值是因为在随机数据下BST趋*于*衡。 同时要维护子树大小和样本容量来回答询问。 具体实现看代码。 【code】 #include<bits/stdc++.h> using namespace std 阅读全文
摘要:
【原题题面】传送门 【题解大意】 将点放入一个数组中按深度排序,用指针扫描,求深度值相加满足条件的点数。 还需要维护该子树内满足条件的点, 因为同一子树内的亮点之间的距离不需要用到根节点的深度值。 【code】 阅读全文
摘要:
点分治 概述 通过求树的重心来给无根树找到一个根。 使得分出的子树的结点个数均不大于n/2,使每次点分治删点后联通块大小减少至少一半。 保证递归层数最多logn。 总复杂度O(nlogn)。 不考虑路径修改 【练习题】 【POJ 1741】Tree 【IOI2011】Race 【SPOJ 1825】 阅读全文
摘要:
【原题题面】传送门 【题解大意】 莫队。这题未免太果。 【code】 #include<bits/stdc++.h> using namespace std; #define File "" #define ll long long #define ull unsigned long long in 阅读全文
摘要:
【原题题面】传送门 【题解大意】 用来练莫队,但是莫队开了O2才苟过去。 动态维护区间内的种类,开cnt[]记录一下便于判断。 【code】 //莫队 #include<bits/stdc++.h> using namespace std; #define File "" #define ll lo 阅读全文
摘要:
【原题题面】传送门 【题解大意】 都说了是莫队练习题。 考虑已知[l,r]区间的mex值时,如何求[l+1,r]的mex值。 比较a[l+1]与已知ans的大小,如果a[l+1]>ans或者a[l+1]<ans,均对答案没有影响。 如果a[l+1]==ans,考虑找到一个比当前ans更大且出现次数为 阅读全文
摘要:
本质 一种离线算法。思路比较自然。 适用范围 1.题目允许离线。 2.能以较低的时间复杂度拓展区间。 3.没有修改或者修改不是那么烦。 4.基于分块思想来进行优化,分块复杂度不行它也GG。 概述 已知区间[l,r]的答案时,将答案扩展到[l+1,r][l-1,r][l,r+1][l,r-1]区间。 阅读全文