抗癌日记

oifive与病魔的抗争,疾病是否可以打败他?

其实就是模拟赛和互测总结啦

会填坑…

2019-08-26【高二组】模拟赛 1

T1

原题可以转化为在原图中删去一些点,使得图中度数最小的丶最大。

我们注意到每次决定这个值的只有度数最小的点,只有删去它才可能影响答案。

于是考虑贪心,每次删去度数最小的丶,并维护答案。

复杂度 \(O(n\log n)\)

T2

模拟,逻辑要想清楚,从基本情况进行考虑。

复杂度 \(O(n)\)

T3

就抄题解吧

考虑枚举一条边,把原树分成两棵树,那么最大乘积要么是两棵树上的最长链乘积,要么是两棵树上的最短链乘积(最短链为负数)。

直接这样做的时间复杂度为 \(\mathcal{O}(n^2)\),根据实现的不同可以得到大小不等的分数。

考虑 DP,首先需要了解换根 DP,同时,我们只考虑最大乘积为两棵树上的最长链乘积的情况,另一种情况同理。

我们首先选定一个根 \(root\)

\(f_i\) 表示 \(i\) 的子树中的最长链,这个很容易通过树形 DP 实现。

具体而言,维护每个点向下的最长链以及次长链,那么 \(f_i\) 要么是该点向下的最长链 \(+\) 次长链,要么是 \(\max_{j \in son_i}\{f_j\}\)

\(g_i\) 表示去掉 \(i\) 子树后,树中的最大正路径,这个可以通过换根 DP 的技巧实现。

具体而言,\(g_i\) 的值只可能为:

  1. \(fa_i\) 除去向 \(i\) 的链后,其向下的最长链 \(+\) 次长链(由于要除去向 \(i\) 的链,因此要维护向下的第三长链)。
  2. \(fa_i\) 除去向 \(i\) 的链后向下的最长链 \(+\) \(fa_i\) 向上的最长链(维护向上的最长链与向下的类似)。
  3. \(g_{fa_i}\)

于是,最终的答案就是 \(\max_{i \neq root}\{f_i \times g_i\}\),时间复杂度为 \(\mathcal{O}(n)\)

2019-09-10【高二组】模拟赛 3

T1

同选择客栈。

T2
posted @ 2019-09-25 00:42  天才美少女雪乃  阅读(156)  评论(0编辑  收藏  举报