zoukankan      html  css  js  c++  java
  • 2021 第二轮省队集训 Day2

    A

    因为每个点的入度至多为 (1),所以原图是一个基环树森林。

    对于每棵基环树,每次将它里面的无出度的点删掉,就能得到环上的点。

    可以发现环上的那些点可以随意转化,于是缩成一个即可。

    再对于所有基环树和普通树的根 (x),连边 (0 o x)。这样就能把它变成一棵树。

    看到“最小值最大”,考虑二分答案。每次二分时 dp 一遍即可。

    但这玩意常数巨大。可以先把 dfs 序预处理出来,二分的时候就不用递归了。

    B

    枚举右端点 (r),考虑如何快速计算答案。

    (lgets rdots 1) 时,某些点会使 (max) 改变,某些点会使 (min) 改变。如果直接维护三个序列的极差的积显然没法做。考虑在线段树上维护 (A) 的极差、(B) 的极差、(C) 的极差、(A) 的极差乘 (B) 的极差、……、三个序列极差之积。

    对于三个序列极差的更改分别更新。维护六个单调栈,算出被每个点 pop 掉的那些点,对于这个区间更新极差即可。由于每个点最多被弹出一次,所以时间复杂度是 (O(n log n)) 的。

    但要注意如果同时维护最大值和最小值就不具有这种均摊性质了。于是只能区间加而不能区间赋值。

    Written by Alan_Zhao
  • 相关阅读:
    vue 短期时间
    使用moment.js写一个倒计时
    使用moment.js
    js 共用文件内容应用
    什么是闭包?闭包的优缺点?
    卧龙阶段
    音阶
    初步理解1=C
    认识简谱的构造,唱名,音名

  • 原文地址:https://www.cnblogs.com/alan-zhao-2007/p/sdptt-2021-2-day2.html
Copyright © 2011-2022 走看看