8.26集训

今天做题

第一道是钓鱼 昨晚是用贪心写的,今天用的dp

写出了点锅,还没d出来,wa了几个点

第二道叫:P4054 [JSOI2009]计数问题

一个二维树状数组的板子题目

以前从来没写过二维树状数组,第一次写

第三道的话,叫P2922 [USACO08DEC]Secret Message G

我愿意称之为Trie树最经典例题

初始没思路,

\(O(len)\)插入,\(O(1)\) 查询

sum表示以这个节点为终点的字符串个数

num表示到达这个节点而且没完成的字符串个数

这样就不重复也不遗漏了

第四道叫 P2887 [USACO07NOV]Sunscreen G

贪心的,感觉很简单,就切了

第五道叫 P1792 [国家集训队]种树

初始没思路,但是据说\(n^3\)的dp显然?????

是一道贪心好题,用\(a[x - 1] + a[x + 1] - a[x]\)来做反悔,因为\(a[x] + a[x - 1] + a[x + 1] - a[x]\)终究还是要等于\(a[x - 1] + a[x + 1]\)

用大根堆来维护,注意每次都要维护好链表

第六道也叫做种树,P1484 种树

这个和上边的大致题意差不多,但就是有一个条件不太一样“k可以不用完”

刚开始可以模仿上边的思路可以做到80分,但是距离正解还差一个边界条件

第五道题与第六道题的推广:再次遇到那种隔着选的题,考虑大根堆和链表维护反悔

第七道题 lca的模板题

这一次完完全全的搞透彻了,有以下几个需要注意的细节:

  • 1.for (i = 30; i >= 0; -- i) if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i]; 需要倒着搞

  • 2.必须从零开始!

第八道题 火车

初始的话,思路不太通畅,隐隐约约知道合并,但是不知道具体怎么合并

用UFS和LCA来做,每次找完之后,顺道把路过的节点都合并起来