Similar Dishes & Dish Of Life & Bear and Row 01
这三个题比较简单吧,一眼题。。。
Bear and Clique Distances
题意:给定 N 个节点的图,其中编号
1−K 的城市之间组成完全图,即 k∗(k−1)2 条边,已知它们长度均为 x ,另外有p 条边,连接起整个图为连通图,图中不存在自环和重边,给定源点 S ,求单源最短路?思路:题目解法很多,首先一种最简单的解法。
解法一: 重新构造一个图,引入新的点O ,将 O 点与点1−k 连边,长度均为 x2 ,其余 p 条边不变,那么整个图只有p+k 条边了,接下来就是 dijkstra算法了,优先队列优化一下,复杂度 O((p+k)logn)解法二:改进一下dijkstra算法,每次第一次访问 1−k 中的节点 v 时,把这个团中其余节点的
dis 距离当做 dis[v]+x ,然后,在遍历与 v 相连的其它边(即该边不在团中)时,更新的时候,原来的dis[v] 用 dis[v]+x 来代替。这样就不需要遍历 k2 条边了。
Chef and Divisor Tree
题意:给定数 x ,根节点值为
x ,该Divisor Tree的值定义如下。 对于树的每个节点,子节点处的值将是其父亲节点值的适当除数(即除父亲节点值本身外的所有数)。该树中路径的权重定义为路径中所有节点的度数之和。Divisor Tree的值将是从根开始的路径的最大路径权重。你有两个整数 A ,
B 。您必须找到所有树的权重之和,其根节点上的值在 A 到B 的范围内,包括两者,数的范围为: [1,1012],|B−A|≤106 。思路:首先可以找一下规律嘛,可以看出,一个数表示为:
x=pk11pk22...pknn
pi 为素数,那么 x 的Divisor Tree的值为:将[k1,k2...kn ]中的值, ans+=(1+k1)∗(1+k2)...(1+kn) ,然后把最大的 ki 减 1 ,进行这个过程,直到该数组元素全为0 ;所以这个题就好做了!(注意数值范围,long long)
Stable market
题意:稳定时间段定义为值相同的极大连续段,在此基础上定义 K 阶稳定时间段为长度至少为
K 的稳定时间段。
给定数组 A ,Q 次询问,每次询问区间 [Li,Ri] 内 xi 阶稳定时间段个数为多少?思路:第一眼看上去,数组转化为一个新的数组,每个元素为每个稳定连续块的长度,然后记录一下这个稳定块的左右区间,问题就转化为新数组里,在指定区间里,有多少个数大于等于 xi ?注意处理一下边界情况就行了!感觉主席树就能做了啊!但是,主席树怎么写来着,忘记了。。。。算了,不写了。。好像分块也能做啊。。。啊。。。不想写。。。。
看了下官方的题解,有很多种解法:
解法一:主席树 或者 线段树+二分
解法二:离线处理+分块, 每次询问的平均复杂度: O(n√logn)