test0418

同步于洛谷

2016 年 5 月 21 日小奇模拟赛

But this requires giving up our outdated concept of learning from mistakes…even a single mistake is unacceptable and we need to get things right the first time.——月考阅读D篇
写挂不能是借口,数组开小不能是借口,变量写错不能是借口,初始化和边界没有考虑完全不能是借口,前后句逻辑上写反也不能是借口……不能犯任何不该犯的低级错误,这才是程序思维,也只能是。

题目分析

T1 小奇的树

原题BZOJ3784 树上的路径(lydsy挂了所以没挂链接)

题意

给定一棵n个节点的有根树,求前m大的路径。

思路

只知道打暴力。还因为作死手玩heap丢了到手的30分。暴力很好打,把所有的路徑存到大根堆裏面即可。關於鏈的子任務可以記錄最長鏈和次長鏈,或者DP(from lightmain),這裏不再贅述。

正解

首先我們看一道線性版本——超級鋼琴這羣神仙是怎麼想到這種神仙做法的(先看題目再回來做過的當我沒說
對於超級鋼琴,首先我們的想法都是暴力——記錄所有的優美度。顯然有 N 2 N^2 N2級別個和絃,不僅TLE而且MLE。那麼我們要怎麼減少需要記錄的信息呢?從要素入手:一個和絃有一個左端點和右端點,優美度即前綴和相減———那麼———考慮前綴和(?)———一個化無序爲有序的想法:固定左端點,考慮右端點(!),這樣不就是求區間最大值嘛!設一個三元組 ( x , l , r ) (x,l,r) (x,l,r),爲【以 x x x爲左端點,找到一個在 [ l , r ] [l,r] [l,r]區間內的 t t t使得兩個前綴和相減的值最大】,即 f ( x , l , r ) = max ⁡ l ≤ t ≤ r ( s u m [ t ] − s u m [ x − 1 ] ) f(x,l,r)=\max\limits_{l\leq t\leq r}(sum[t]-sum[x-1]) f(x,l,r)=ltrmax(sum[t]sum[x1])。初始化即把所有的 f ( x , x + 1 , n ) , 1 ≤ x < n f(x,x+1,n),1\leq x< n f(x,x+1,n),1x<n扔進大根堆。注意!取走了 s u m ( k ) − s u m ( x ) sum(k)-sum(x) sum(k)sum(x)後,還有可能有 f ( x , l , k − 1 ) f(x,l,k-1) f(x,l,k1) f ( x , k + 1 , r ) f(x,k+1,r) f(x,k+1,r)對答案有貢獻。那麼大根堆裏面應該記錄的是四元組 ( x , l , r , f ( x , l , r ) ) (x,l,r,f(x,l,r)) (x,l,r,f(x,l,r))
同理,我們把這個思想放到樹上,用點分治維護一下dfs序。這裏把所有生成的路径放到一個數組裏面。
對應的 x x x是一個點, s u m ( x − 1 ) sum(x-1) sum(x1)改成點 x x x到分治中心的距離, ( l , r ) (l,r) (l,r)是在這個分治中已經到達過的点与分治中心的路径組成的區間, f ( x , l , r ) f(x,l,r) f(x,l,r)不言而喻。
這題就做完了。

T2 小奇的图

需要使用LCT。然而现在我还不会。。。
所以正解现在不会写,只是说一说一些技巧。

题意

(抄的原题)给定 n 个点(编号为 1-n),由 m 条无向边连接的图,每个点有两个权值 ax,bx,给定一个值 k,要求在图中选出大小为 k 的点集 S,使 S 中任意两点间存在仅经过在 S 中的点的路径。设 As 为点集 S 中 ax 的最大值,Bs 为 S 中 bx 的最大值,求一个合法的 S 使得 As+Bs 最小。

技巧

使得As+Bs最小,看起来没有什么可以直接看出来的规律,然而我们总是要化無序爲有序——贪心;而选一个点集 S ,就是维护一个联通块,那么大概可以想到一种枚举点的顺序什么叫大概可以:将点用ax值从小到大排序,然后逐渐加点,直到最大的联通块的size达到k以上——这时,用单调队列维护bx值,从大到小删点,直到再删一点就不能满足size大于等于k为止,此时记录答案。
用LCT维护这棵(最小生成)树的size即可什么什么。注意要把点的权值转化成维护边的权值,用两点中bx权值大的赋值边权即可。

T3 crisis

震惊,模拟竟然有90分。

题意

多次查询有边权的树上距离点x最近在[l,r]中的点的距离。

思路

只会打暴力。每次以x为根深搜一遍找最近的。(但是为什么ovor能跑极限数据艹)

正解

对每一个分治中心开一棵动态开点线段树,然后每次在分治中心查询[l,r]中的距离取min。这样一定可以忽略劣解。

考试总结

数据结构用得太少了,而且也不熟悉,导致考试根本不会用。更别说没学会的了。
要学会怎么处理数据,掌握化无序为有序的思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值