2022天梯赛
L1
L1的题目冲的非常快,就败在了L2-1的模拟题,主要是种种原因后面心态炸了
L1-7
赛场上我用容斥写的
但是听说下面这种解法更简便
1 |
|
L1-8
对权值进行维护就好了
L2-1
天梯赛就三个小时占了我
这个一个半小时的题目,我觉得写不出来一是基础不扎实,二就是当时心态炸了,后面根本没心思调
1 |
|
L2-2
垃圾题
傻逼题
1 |
|
L2-3
就是个典型的小树形dp,但是赛场上没思路,感觉把时间丢在这道题而不是L2-1的模拟应该可以冲
题目要求的是最后不用回来的总代价距离最小值
但是对确切的外卖点,往返各一次是确定的,所以很显然预处理到根的距离,剪掉要送外卖的地点集合的最大值就好了
1 |
|
L2-4
一样的代码,赛场上超时只有15分,现在一发满分,我tm当时还全删了重写浪费我时间!
傻逼东西rnm退钱!
1 |
|
L3-1
比较裸的拓扑排序,根据数字的大小关系建边,如果我比你大,那么你会向我连一条边,我入度加加
入度相等的时候用字符串大小来排序,可以用优先队列来处理
我在打比赛的时候往L3瞄了一下,感觉第一题其实可以做,也对着样例一眼就看出来要纵向判断建边
但是“入度相等的时候用字符串大小来排序”,这里我脑抽了,没有想到用优先队列,加上前面的L2还没写完,因为分数没拿够L3不算分
所以跑去写L2了,这波属实是拉跨啊我靠,要是顺利切掉L2-1的话能水230分,百分百国二
1 |
|
经典题
首先,我们对于这个树上两个结点的关系分为两类,一类是有直接父子或祖先关系的结点对,这样的结点对在DFS序中的顺序是确定的,一定是父亲在前面,儿子在后面,那么这样的结点对,如果是逆序对,一定会出现在每一种DFS序中,所以,这样的逆序对的贡献就是这个树的DFS序的种类数。另外一类就是不具有直接父子或祖先关系的结点对,这样的结点对在每种DFS序中的顺序不固定,但是我们经过观察完全可以发现(我发现不了,杜喻皓大爹说了我才知道 ),这样的结点对要不然是逆序对,要不然不是逆序对,概率都是1/2,那么从期望的角度考虑,这样的结点对对于答案的贡献其实就是这个树的DFS序的种类数除以2
那么如何求解一颗树的DFS序种类数呢,其实很简单对于一颗子树u,它的DFS序的种类数就是它的所有子树的方案数的乘积,再乘上u的子树个数的全排列(也就是阶乘),然后向上递推就行。第二个问题,如何求解两种点对的数目。首先我们知道,对于n个点能组合出来的总点对数是n*(n-1)/2,那么只要求出其中一类的个数,另外一类就知道了,我们选择求解上述第一类的个数,令 d[i] 表示以 i 为根节点的子树第一类结点对的数目,很容易观察得到,其实就是以 i 为根节点的子树中 i 有多少个孩子or孙子,那么这个自然也可以向上递推。第三个问题,如何计算第一类结点对中逆序对的个数,我们令 mx[i] 表示从结点 i 出发往上遍历直到根节点,有多少个比它大的结点数,这个在DFS的过程中在值域上建立树状数组就可以统计。
L3-2
1 |
|
csoj还几乎有道原题传送门
求期望的话不要计算dfs序种类数,删去取模操作
1 |
|
L3-3
1 |