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
  • 相关阅读:
    部署nginx服务
    mysql主从配置
    LNMP+WordPress博客搭建
    CIFS(Samba)服务的使用
    NFS服务的使用
    LVM逻辑卷
    FTP学习
    文件处理+生成器
    内置函数
    Python3
  • 原文地址:https://www.cnblogs.com/alan-zhao-2007/p/sdptt-2021-2-day2.html
Copyright © 2011-2022 走看看