WC2015流水账
THU那四场考试没考好,只有20+名。这也许是我OI生涯中最后一场吧(已确认是最后一场),真是感慨万千。
day0
搬进浙大宿舍404房间(神房间号),四个人一间。中午发现学军伙食相当良心,是我参加的OI活动中最良心的
day1
徐寅展
讲了一些动态维护图的连通性以及最小生成树的算法,太深了,基本上只听懂第一个维护图的连通性的算法。下面就简单讲一下这个算法吧。
首先,这个算法是在线算法,其时间复杂度是m lg^2。离线算法可以做到m lg,用LCT维护最大生成树就行了(边权为边被删除的时间)。
大概做法是,维护\(\lg{n}\)个生成森林,满足第i个森林是第i+1个森林的子集,并且其每棵树的大小不超过\(2^i\)。然后,考虑删除一条树边,这时需要尝试寻找一条替换边来连接断开的两块。假设在第i个森林中删边,设断开的两块中较小的那块大小为k,显然\(k \leqslant 2^{i - 1}\),所以可以将其加入第i - 1个森林。我们将所有这些边降级到i - 1。由于每条边至多降级lgn次,总共至多降级mlgn次。每片森林需要用LCT维护,另外还要维护和某一块连接的所有边,故复杂度还要乘上一个lg。
吴争锴
日程表上写的是“ACM题目选讲”,没想到成了Primality Test。讲了一个神一般的AKS算法,根本听不懂。只记得这个算法的发现证明了PRIMES in P,因为它可以在多项式时间内判定素性。但是这玩意儿有什么用?朴素实现复杂度据说是\(\Omega{\lg{n}^{10}}\),加了优化似乎能够做到\(\Theta{\lg{n}^{6}}\),但还是比Miller Rabin慢到哪里去了。
还有就是,Miller Rabin似乎可以改造为确定性算法,但其依赖于黎曼猜想的正确性。
有印象的大概就这些,其他时候也许我在睡吧。
day2
俞鼎力
Tree Decomposition,乍看还以为是链剖。其实是一个神爆了的玩意儿,叫做图的“树分解”。这东西之前从来没有听说过啊,看来OI正在蓬勃发展(似乎很多OI中常用的算法都是某神犇从paper通过WC的渠道引进的)。
大概就是把一张图弄成一棵树,树上的节点对应于原图的一个集合(不一定互不相交),并且原图中的每个节点,树中仅有一个极大的非空的包含它的连通块。
定义一张图的树宽为该图的所有树分解中,最大的节点集合的大小的最小值。
对于树宽的上界为一个小常数的图,一些问题可以通过构造这样的树分解,然后用树形dp在多项式时间内高效地解决。例如最大独立集和哈密顿回路。总的来说就是,因为每个集合的大小可以看做常数,所以即使我们乱搞,复杂度也是多项式的。
另外还讲了几个近似算法。这个好理解,但是感觉也不好写,而且难说在OI中有什么用。
董宏华
我很早就听说拟阵这个东西可以用来证明贪心的正确性,因为我个人总是不太会贪心的证明,所以一直都比较想了解拟阵,但由于种种原因一直都没有学。现在终于学了,感觉还是很厉害的。
只简单说一下。由拟阵的性质(遗传性和增广性,即其中任意一个独立集都可通过增广变成某个基),容易证明求拟阵的权值最大(或最小,由于基的大小是一定的)的基的贪心算法的正确性。只需要从大到小考虑每个元素,尝试将其加入当前集合,如果加入后为独立集则加入,否则跳过就行了。
例如Kruskal算法,其实就是求图的环拟阵的权值最小的基(其中的独立集便是不成环的边集)。
day3
胡伟栋
讲计算几何,总体较简单。不过我还是有收获的。我现在知道扫描线有多强大了。
沈洋
构造题选讲。我感觉构造题都是谜一样的,一般不看题解根本不会,看了题解后往往又觉得是自己傻逼了。这堂课大概又感受了一下神构造题的威力吧。
day4
范浩强
又是randomization。前面部分讲Goldreich-Levin算法,听不懂。后面讲了交互式证明,比较好玩。不过由于讲的有用的东西过于神犇,所以这堂课也谈不上有多大收获。
陈立杰
陈老师这次的主题出人意料地正常:OI中的计数题(记得去年是函数式数据结构,而且还是英文讲义)。讲了许多值得收藏的好题。
day5上午考试,感觉精神状态还是不错的。
先看了第一题,要求k小割,感觉不好做,没思路,于是看了第二题。发现题目极长并且是fhq出的,所以直接跳到第三题(事实证明这是正确的决定)。第三题是提交答案题,要求对给出的一些逗比算法进行优化,用另一个算法得出相同的结果。这些算法都是用代码给出的,所以先要读懂它们在干什么。
我很快搞出了1,2,4,5这四个点,3是问前n项的i次方和,我想到的方法有:1.求伯努利数 2.带值求出几个点后进行多项式插值,可以用高斯消元或拉格朗日插值法 3.差分后用矩阵快速幂
我想了一会儿,感觉用第三个比较靠谱。于是就用这个搞出了3。
然后看了第一题数据范围,发现有10分暴力,中间有40分的特殊情况。对于这40分我第一感觉是拿堆搞,但是想了想感觉又不好弄。稍不注意状态就会暴涨。不过我还是想到了靠谱的做法,对每个状态只需要记最后的不是最优的位置以及它是选B还是AB都选,另外记下方案的权值就行了。然后每个状态有至多3个后继状态,选择将后面一个变成选B,或者将当前的换成后面一个,或者如果当前是B,将当前的换成选AB。能够想到这样搞从初始状态到每个选择方案的途径都是唯一的,并且每个状态的后继状态都更劣。所以拿堆搞搞就好了。有用的状态总数不超过3k。
然后所剩时间就不多了。第二题感觉是没希望把题意理解正确了,第三题看了后几个点发现有两个点可以搞点部分分出来,所以又搞了几下。
结果50 + 0 + 51。第三题中间有两个点的得分比预计的少,总共比预计少了3分。应该是爆了精度了。这个也不太好检查因为没有给checker。
听说最高分是160+,看来是要退役了。
day6
上午游西湖。下午高端论坛,然后闭幕式。
闭幕式上终于宣布了十五人名单。不出所料,我就这样退役了。
今年一等奖分数线没上70,比去年低了不少。