时间太散了就硬生生拖了两天、、
这次挑战的题目全是普及组、、
1、车站分级 2、推销员
先插入一个TA对普及一题的评价。
第一题:想到了一个很神(弱)的建图方式,即不经过的向经过的连边,最后遍历深度即可。。而且从入度为0的开始搜,看起来是个强力的剪枝。。
交之前:哈哈,这么神的做法,肯定A了。
交之后: —.— 、 20、、
WOC 就对了两个样例,其他全T了。 呵呵,20我收下了。 不过就算把dfs直接去了,也还有3个点是T、建图好像就超时了、、
默默看题解: 噢,这里其实有一个很神的优化,就是用双重表来表示连与被连的关系。
因为一次是给一批点加相同的一批点,所以这样处理简直就是优化神器。
说白了就是根据连边的特性来优化。
再加上记搜,快的飞起。
第二题:dp竟然会超时,n^2就爆了。
思考贪心策略很久,有了一个或许可行的方法。
就是倒过来每一步删一个点,这个点如果小于最远距离且最小就删掉,如果等于最远距离就和第二小与最远距离的的点做选择。
其实很多时候都会犯这样的错误,事实上这种反着想的策略和正着想是等价的,刻意从反面入手有时是不必要的。
这题正解是利用每次修改的特性维护优先队列。
now初值为0,从now到n找一个修改终点比他大的作为终点。类似于这个东西:
感觉这是一种新型的,很有用的维护方式。它将每次决策都缩得很少,因为按最大取,不可能出现回选的情况,所以直接用带指针的队列搜寻,效率很高,平均n*logn的效率。