摘要: __stdcall大佬的讲解 这里贴的代码写的是点修改、区间查询的题。阅读全文
posted @ 2018-11-08 21:59 Driver_Lao 阅读(9) 评论(0) 编辑
摘要: 【题解】 思维题,看了别人的博客才会写。 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻的。 我们可以发现,在100000的范围内,这个矩阵最多只有18行,11列。 那么这个矩阵的取数字的阅读全文
posted @ 2018-11-07 16:43 Driver_Lao 阅读(5) 评论(0) 编辑
摘要: 【题解】 题目中说将队列进行排序就可以获得一个非降的序列,那么各个队列中的元素有序、同时不同的队列之间也是有序的。 我们把原序列排序,每个双端队列必定对应一段连续的子序列,且这段子序列里面元素在原序列的位置应该是先递减后递增的。 那么我们用贪心的策略扫一遍,可以加入当前队列的就加入、更新信息,不行就阅读全文
posted @ 2018-11-07 14:08 Driver_Lao 阅读(12) 评论(0) 编辑
摘要: 【题解】 经典的树形DP,这里补一下题解。 我们可以把边权转化为点权,设f[i][j]为i节点,保留了j个节点的最大价值。 那么转移就是f[i][j]=max(f[i][j],f[i][j-k]+f[to][k]),其中f[i][1]为i点的父亲到它的边的边权,我们转化为i的点权。 每个点要强制取它阅读全文
posted @ 2018-11-06 22:07 Driver_Lao 阅读(5) 评论(0) 编辑
摘要: 【题解】 我想到了两种解法。 一种是扫描线+线段树+单调栈。 另一种方法是O(n)的,比较巧妙。 考虑每个数在哪些区间可以作为最小数。最长的区间就是它向左右走,直到有数字比它小,这个可以用单调栈维护。 那么区间数就是它左边可以走的距离*右边可以走的距离,答案减去这个数字*区间数。 再考虑每个数在哪些阅读全文
posted @ 2018-11-02 17:12 Driver_Lao 阅读(22) 评论(0) 编辑
摘要: 【题解】 题意其实就是把n个物品分成4个集合,其中三个集合不可以为空(只属于A、只属于B、AB的交),一个集合空或者非空都可以(不属于A也不属于B),问有多少种方案。 考虑容斥,4个集合都不为空的方案数有4^n-4*3^n+6*2^n-4,3个集合不为空的方案数有3^n-3*2^n+3. 相加就是总阅读全文
posted @ 2018-11-02 17:06 Driver_Lao 阅读(19) 评论(0) 编辑
摘要: 【题解】 其实就是求两棵树不同的边有多少条。那么我们用一个set来去重即可。阅读全文
posted @ 2018-11-02 16:28 Driver_Lao 阅读(8) 评论(0) 编辑
摘要: 【题解】 每个点维护各个儿子的前后缀最大值、权值和,这样就可以统计儿子之间相乘的答案。然后每个节点再乘它的祖父的权值去更新答案即可。阅读全文
posted @ 2018-11-02 07:01 Driver_Lao 阅读(6) 评论(0) 编辑
摘要: 【题解】 一道简单的模拟题。需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好。阅读全文
posted @ 2018-11-01 18:48 Driver_Lao 阅读(6) 评论(0) 编辑
摘要: 【题解】 先建反向图,dfs求出哪些点可以到达终点。 再建正向图,dfs求出哪些点可以作为路径上的点。 最后在合法的点之间连边,跑dijkstra.阅读全文
posted @ 2018-10-31 21:38 Driver_Lao 阅读(5) 评论(0) 编辑
摘要: 【题解】 树链剖分+线段树的模板题。每个点的点权是它父亲到它的边的边权,这样我们就完成了把边权变为点权的操作,之后直接树剖即可。 注意回答询问的时候要把lca(x,y)去掉,因为x到y的链上并不包含lca(x,y)到它的父亲的边。阅读全文
posted @ 2018-10-31 19:54 Driver_Lao 阅读(8) 评论(0) 编辑
摘要: 【题解】 我们先从1到Max ai枚举Tab占几个空格,然后跳着统计答案。 跳着统计答案的意思是对于每个长度i,在值域上%i的循环节是i,所以我们把值域分成m/i个区间,一个个计算答案。这样复杂度是调和级数,也就是n*ln n的。 统计答案的时候可以用值域上的前缀和辅助。阅读全文
posted @ 2018-10-31 15:15 Driver_Lao 阅读(9) 评论(0) 编辑
摘要: 【题解】 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解。 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u向vi连边。 连边之后我们跑拓扑排序,并且用堆维护当前入度为0的点中编号最小的,以此来让字典序最小。阅读全文
posted @ 2018-10-31 15:02 Driver_Lao 阅读(11) 评论(0) 编辑
摘要: 【题意概述】 给出一棵树,树上的边有两个值a和b,你可以在[0,limit]范围内选择一个整数delta,树上的边的权值为a+b*delta,现在问当delta为多少的时候树的直径最小、最小直径是多少。 【题解】 每条边的边权都是一次函数,那么直径是单峰函数。单峰函数求最小值我们可以用三分法。 注意阅读全文
posted @ 2018-10-31 14:42 Driver_Lao 阅读(8) 评论(0) 编辑
摘要: 【题意概述】 某个物体要从A途经B到达C,在通过B的时候速度不能超过vd. 它的加速度为a,最大速度为vm;AB之间距离为d,AC之间距离为L; 问物体最少花多少时间到达C. 【题解】 分情况讨论。 若物体一直加速,通过B之前速度已经超过了vd,那么显然物体必须先加速后减速才能保证通过B是速度为vd阅读全文
posted @ 2018-10-30 15:25 Driver_Lao 阅读(5) 评论(0) 编辑
摘要: 【题解】 考虑从小到大枚举边权,按顺序加边。 当前树被分成了若干个联通块,若各个块内的点只能跟块外的点匹配,那么最终的min g(i,pi)一定大于等于当前枚举的边。 判断各个联通块内的点是否全部能跟块外的点匹配,只需比较sum-cnt[i]、size[i],其中sum是所有x的和,cnt是块内x的阅读全文
posted @ 2018-10-28 20:36 Driver_Lao 阅读(24) 评论(0) 编辑
摘要: 【题解】 跟51nod 1105差不多。 二分答案求出第L个数和第R个数,check的时候再套一个二分或者用two pointers. 最后枚举ai在b里面二分,找到所有范围内的数,排序后输出。 注意最后找到的数可能多于R-L+1,需要考虑这一点。阅读全文
posted @ 2018-10-28 20:18 Driver_Lao 阅读(15) 评论(0) 编辑
摘要: 【题解】 二分答案,check的时候枚举ai再二分b,求出有多少个数比mid大(或小)。其实check的时候用two pointer也可以,因为mid是单调的,a、b也是单调的。阅读全文
posted @ 2018-10-28 20:02 Driver_Lao 阅读(11) 评论(0) 编辑
摘要: 【题解】 经典的带权并查集题目。 设cnt[i]表示i前面的点的数量,siz[i]表示第i个点(这个点是代表元)所处的联通块的大小;合并的时候更新siz、旧的代表元的cnt,路径压缩的时候维护cnt即可。阅读全文
posted @ 2018-10-27 23:14 Driver_Lao 阅读(12) 评论(0) 编辑
摘要: 【题解】 拓扑排序+DP即可。阅读全文
posted @ 2018-10-27 22:03 Driver_Lao 阅读(8) 评论(0) 编辑