“暴力万岁!” 又被虐了一天之后,我只能无奈地发出呼喊。
今天的题目呢,嗯,简单地说,像是暴力专场。毕竟暴力也是一门艺术!
共4题,有2人300+,我只有140。先上题,慢慢分析。
T1 :Span
题目大意:给出N个点,M条边。在M条边中选取N - 1条边使图联通,并且最长边和最短边的差最小【总代价不要求最小】 PS.多组数据,最多6组。
范围:
1:2 ≤ n ≤ 100 and 0 ≤ m ≤ n(n − 1)/2
2:每条边的权值小于等于10000
3:保证没有自环,没有重边
一眼看上去,MST。仔细一看,不要求总代价最小,要极差最小,嗯,做M遍MST,枚举最短的边是什么,M^2暴力。
仔细算算时间复杂度,就算N只有100,M也能达到5000左右,总时间(理论上)为 M * M * 6 + M log M = 1.5亿
怎么看都过不了,而且数据完全没有分段,还以为很难,没有想象中那么简单。
于是博主就花时间在优化上。。。无从下手,只能暴力。
然后,这就是”正解“。 因为实际上根本达不到M*M。。。是这么解释的,最理想是M*N(只有N条边啊)
T2:无聊的草稿
题目大意:给出一颗无根树,在树上找一条链,使链上的每一个点的度数之和最大。
数据范围:
1. 对于20%的数据,N≤200
2. 对于40%的数据,N≤5000
3. 对于100%的数据,N≤10^6
理解出题目大意之后就明白了,这是要我们求带点权的最长链,关键是,我忘了怎么快速地求最长链。。。。
博主摸索了许久没有头绪之后,只能N^2暴力地做N次SPFA找最长链了。
实际上最长链的题目我们遇到过几次,像POJ 1985 树的直径,现在想起来还记得我当时惊讶的神情QAQ
树的最长链其实只需要两次SPFA,先任意选择一个节点做SPFA(最好用叶节点啦),找出距离最远的点NUM。
再从NUM出发做一次SPFA,找出距离最远的NUM2,NUM --> NUM2就是一条最长链。(最长链可能有多条,但长度一定一样)
证:
第一次找出的NUM必定是深度最深的点(之一),若存在另一条最长链,它的终点 E 必然不是深度最深的点。
对于这样一条链,必然有某一个祖先X可以引到NUM
对于起点S -- > X这一段是两个链公用的,len(X -->NUM) > len(X --> E) ,因为NUM更深。
即S --> E不是最长链。
即:不存在比S --> NUM更长的链。得证:S --> NUM为最长链。
【不理解的同学可以去查更高级的证明方法。】
这样一来,对于所有求树的直径【最长链】的题都可以2遍SPFA解决啦。
这一题也是一个比较明显的树形DP,博主没有去写因为过于繁杂,有兴趣的同学可以推一下。
T3:锻炼身体
题目大意:NOI2005 瑰丽华尔兹 原题
数据范围:
对于60%的数据 N,M<=80 K<=50
对于100%的数据 N,M<=200,K<=200,T <= 10000
【比NOI2005原题的数据水】
读完题目,分析数据范围,嗯,暴力(N^3就能过),没有更简单的方法了。
由于它可以走走停停,难道要2^K枚举?
不对不对,一定是DP,怎么DP?
一步一步地模拟?不对不对,太慢(慢?)了。
那就暴力吧,可是2^K怎么暴力啊?
DP?暴力?DP?暴力?
博主就这么纠结着思考了45MIN居然无果,无从下手,直接跳过,殊不知,这题,最水。
首先,DP and 暴力都是可以的。因为这个DP本质上就是暴力。
设F[I,X,Y]为第I个时间段,人物在(X,Y)的最大移动距离。
转移时,枚举第I个时间段走了多少步(step = 0 ~ T[I]),得出移动后位置(tx, ty),
F[I + 1 , tx ,ty] = max(F[I + 1,tx , ty] , F[I , x, y ] + step)
答案就是F[K + 1]的最大值,时间复杂度N*M*K*STEP。连数据强化的NOI 2005的那题 都能过。因为K*STEP不会太大。
T4 : Train
题目大意:各站分别编号为1到N,按照列车通过的顺序递增排列。在列车到站时,可以挂上或卸下一些车厢。当然挂上的车厢只能挂在车头或车尾,同样也只有车头或车尾的车厢可以卸下来。现在有M节车厢,每节车厢都有一个起点和终点,你要安排出一个控制过程,是的每个车厢能在它的起点处挂上车厢,在它的终点处卸下车厢。
题目我就不解释了,怎么看都是NP问题,由于此题题解完全看不懂,某大牛也表示不明白,博主表示放弃,强扭的瓜不甜,等哪天我能懂了再回来写吧。
今天的题目总的来说还是相对简单的,都是暴力可以解决的问题。暴力搜索薄弱的我就有些忧伤,多打,多练。博主本来也打出了第二题,第三题,由于暴力搜索的程序出现了很多BUG调试不过来,改题的时候每题都用了将近1h,我还得继续打程序。
今天就这么结束了,冰冻三尺非一日之寒,我还得继续积累。