上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 65 下一页
摘要: 题面描述的相当绕,其实就是如果ai=j,重排后ai要在aj之后。同时每个ai有附属属性wi,要求最大化重排后的Σiwi。 容易发现这事实上构成一张图,即由j向i连边。由于每个点入度为1或0,该图是基环外向树森林,并且如果图中有环显然无解,所以这张图就是个森林。把0也看做一个点后变成一棵树。由于其是基 阅读全文
posted @ 2018-12-12 20:45 Gloid 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 板子题。 阅读全文
posted @ 2018-12-12 13:11 Gloid 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 首先将之间没有锁的房间合并。显然可达性具有传递性和反交换律(即若a能到达b,则b不能到达a)。 考虑对每个房间找到其左右第一个(即与其最接近的)能作为起点到达它的房间。如果能求出这个,对此建两棵树,问题就变为终点是否在起点的子树内。 容易想到单调栈。不妨考虑求左边第一个。栈内维护当前房间左边能作为起 阅读全文
posted @ 2018-12-11 20:11 Gloid 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 注意到一旦在某个路口被红灯逼停,剩下要走的时间是固定的。容易想到预处理出在每个路口被逼停后到达终点的最短时间,这样对于每个询问求出其最早在哪个路口停下就可以了。对于预处理,从下一个要停的路口倒推即可。问题只剩下如何求出下一个要停的路口,这相当于求满足di,j%(g+r)>=g的最小j,对d做一个前缀 阅读全文
posted @ 2018-12-11 12:48 Gloid 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 日常猝死。 A:f[i]表示子树内包含根且可以继续向上延伸的路径的最大价值,统计答案考虑合并两条路径即可。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include 阅读全文
posted @ 2018-12-11 03:24 Gloid 阅读(386) 评论(1) 推荐(0) 编辑
摘要: 二进制数能被3整除相当于奇数、偶数位上1的个数模3同余。那么如果有偶数个1,一定存在重排方案使其合法;否则则要求至少有两个0且至少有3个1,这样可以给奇数位单独安排3个1。 考虑线段树维护区间内的一堆东西,合并两节点时计算跨过区间中点的答案。可以对每个节点记录f[0/1][0/1][0/1][0/1 阅读全文
posted @ 2018-12-10 23:50 Gloid 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 首先相当于最大化access的轻重边交换次数。 考虑每个点作为战场(而不是每个点所代表的国家与其他国家交战)对答案的贡献,显然每次产生贡献都是该点的子树内(包括自身)此次access的点与上次access的点在该点不同儿子的子树内。假设得到了最后的崛起序列,可以发现相互不包含的子树的贡献是相互独立的 阅读全文
posted @ 2018-12-09 20:56 Gloid 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 第一眼看错题以为只是要求区间值域连续,那莫队一发维护形成的值域段数量就行了。 原题这个条件相当于区间内相邻数差的绝对值不超过1。所以只要对这个做个前缀和就……完了? 阅读全文
posted @ 2018-12-09 00:39 Gloid 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]为前i个划成j段的最小代价,枚举上个划分点转移。容易想到这个dp有决策单调性,感性证明一下比较显然。如果用单调栈维护决策就不太能快速的求出逆序对个数了,改为使用分治,移动端点时树状数组维护即可,类似莫队的每次都在原有基础上更新。注意更新时先加再减。感觉复杂度非常玄学丝毫不能看出为啥只 阅读全文
posted @ 2018-12-08 23:54 Gloid 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 线段树的任意一棵子树都相当于节点数与该子树相同的线段树。于是假装在树形dp即可,记忆化搜索实现,有效状态数是logn级别的。 阅读全文
posted @ 2018-12-08 21:17 Gloid 阅读(227) 评论(0) 推荐(0) 编辑
上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 65 下一页