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)