摘要: 【题意】 有N只奶牛,要摞在一起。 每只奶牛有重量wi和体力值si 每只奶牛的压扁值为它上面的奶牛的重量w之和-它自己的体力值si 使最大的压扁值最小。 【题解】 贪心,构造排序的compare函数即可。 假设有两只相邻的奶牛i和j, i在j上的总压扁值是 max( a+Wi-Sj, a-Si),  阅读全文
posted @ 2020-06-15 21:48 Driver_Lao 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 【题意】 n件物品,背包可容纳重量为m的物品 每件物品有重量wi,价值vi,所属组别gi 同个组中的物品只能拿一件 问最大价值 【题解】 正常01背包的写法是 for i 枚举每个物品 for j 倒序枚举背包容量 f[j]=max(f[j], f[j-w[i]]+v[i]) 在分组背包中,同个组中 阅读全文
posted @ 2020-06-06 22:02 Driver_Lao 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 【题解】 注意这个图不保证联通。 对各个联通块尝试进行黑白染色,不能染色的话无解,可以染色的话选择点数较小的一部分加入到答案中。 【代码】 阅读全文
posted @ 2019-10-08 11:31 Driver_Lao 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 【题解】 入门搜索题。 先n方枚举每对单词,计算他们接龙可以让长度延长多少,可以延长的在链式前向星中加边。 搜索的时候按照边表逐个扩展就好了。 【代码】 阅读全文
posted @ 2019-07-09 23:47 Driver_Lao 阅读(306) 评论(0) 推荐(0) 编辑
摘要: __stdcall大佬的讲解 这里贴的代码写的是点修改、区间查询的题。 阅读全文
posted @ 2018-11-08 21:59 Driver_Lao 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 【题解】 思维题,看了别人的博客才会写。 写出这样的矩阵: 1,3,9,... 2,6,18,... 4,12.36,... 8,24,72,... 我们要做的就是从矩阵中选出一些数字,但是不能选相邻的。 我们可以发现,在100000的范围内,这个矩阵最多只有18行,11列。 那么这个矩阵的取数字的 阅读全文
posted @ 2018-11-07 16:43 Driver_Lao 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 【题解】 题目中说将队列进行排序就可以获得一个非降的序列,那么各个队列中的元素有序、同时不同的队列之间也是有序的。 我们把原序列排序,每个双端队列必定对应一段连续的子序列,且这段子序列里面元素在原序列的位置应该是先递减后递增的。 那么我们用贪心的策略扫一遍,可以加入当前队列的就加入、更新信息,不行就 阅读全文
posted @ 2018-11-07 14:08 Driver_Lao 阅读(212) 评论(0) 推荐(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 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 【题解】 我想到了两种解法。 一种是扫描线+线段树+单调栈。 另一种方法是O(n)的,比较巧妙。 考虑每个数在哪些区间可以作为最小数。最长的区间就是它向左右走,直到有数字比它小,这个可以用单调栈维护。 那么区间数就是它左边可以走的距离*右边可以走的距离,答案减去这个数字*区间数。 再考虑每个数在哪些 阅读全文
posted @ 2018-11-02 17:12 Driver_Lao 阅读(309) 评论(0) 推荐(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 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 【题解】 其实就是求两棵树不同的边有多少条。那么我们用一个set来去重即可。 阅读全文
posted @ 2018-11-02 16:28 Driver_Lao 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 【题解】 每个点维护各个儿子的前后缀最大值、权值和,这样就可以统计儿子之间相乘的答案。然后每个节点再乘它的祖父的权值去更新答案即可。 阅读全文
posted @ 2018-11-02 07:01 Driver_Lao 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 【题解】 一道简单的模拟题。需要判一些特殊情况:第一项的正号不用输出,x的一次项不用输出指数,系数为0的项不用输出等等,稍微细心一下就好。 阅读全文
posted @ 2018-11-01 18:48 Driver_Lao 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 【题解】 先建反向图,dfs求出哪些点可以到达终点。 再建正向图,dfs求出哪些点可以作为路径上的点。 最后在合法的点之间连边,跑dijkstra. 阅读全文
posted @ 2018-10-31 21:38 Driver_Lao 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 【题解】 树链剖分+线段树的模板题。每个点的点权是它父亲到它的边的边权,这样我们就完成了把边权变为点权的操作,之后直接树剖即可。 注意回答询问的时候要把lca(x,y)去掉,因为x到y的链上并不包含lca(x,y)到它的父亲的边。 阅读全文
posted @ 2018-10-31 19:54 Driver_Lao 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 【题解】 我们先从1到Max ai枚举Tab占几个空格,然后跳着统计答案。 跳着统计答案的意思是对于每个长度i,在值域上%i的循环节是i,所以我们把值域分成m/i个区间,一个个计算答案。这样复杂度是调和级数,也就是n*ln n的。 统计答案的时候可以用值域上的前缀和辅助。 阅读全文
posted @ 2018-10-31 15:15 Driver_Lao 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 【题解】 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解。 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u向vi连边。 连边之后我们跑拓扑排序,并且用堆维护当前入度为0的点中编号最小的,以此来让字典序最小。 阅读全文
posted @ 2018-10-31 15:02 Driver_Lao 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 【题意概述】 给出一棵树,树上的边有两个值a和b,你可以在[0,limit]范围内选择一个整数delta,树上的边的权值为a+b*delta,现在问当delta为多少的时候树的直径最小、最小直径是多少。 【题解】 每条边的边权都是一次函数,那么直径是单峰函数。单峰函数求最小值我们可以用三分法。 注意 阅读全文
posted @ 2018-10-31 14:42 Driver_Lao 阅读(210) 评论(0) 推荐(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 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 【题解】 考虑从小到大枚举边权,按顺序加边。 当前树被分成了若干个联通块,若各个块内的点只能跟块外的点匹配,那么最终的min g(i,pi)一定大于等于当前枚举的边。 判断各个联通块内的点是否全部能跟块外的点匹配,只需比较sum-cnt[i]、size[i],其中sum是所有x的和,cnt是块内x的 阅读全文
posted @ 2018-10-28 20:36 Driver_Lao 阅读(266) 评论(0) 推荐(0) 编辑