• 专题练习记录


    一、线段树优化建图

    • [x] CF786B Legacy
    • [x] P6348 [PA2011]Journeys
    • [x] P3588 [POI2015] PUS
    • [x] P5025 [SNOI2017]炸弹
    • [x] 5029 T'ill It's Over
    • [x] CF1045A Last chance
    • [x] F793G Oleg and chess

    二、DP练习

    2.1区间DP

    • [x] [POI2015]MYJ

    2.2数位DP

    • [x] [CF908G]New Year and Original Order

    2.3树形DP

    • [x] [AGC034E] Complete Compress

    • [x] [清华集训2017] 榕树之心

    2.4笛卡尔树DP

    • [x] [SP3734]PERIODNI - Periodni

    • [ ] [AGC026D]Histogram Coloring

    2.5单调性优化DP

    • [x] [ICPC2017 WF]Money for Nothing

    • [x] [CF868F]Yet Another Minimization Problem

    • [ ] [USACO19FEB] Mowing Mischief P

    2.6DP套DP

    • [x] [BZOJ3864]Hero meet devil
    • [x] [LOJ6274]数字

    2.7自动机DP

    • [x] [AGC024F] Simple Subsequence Problem

    • [ ] [CF1110H]Modest Substrings

    • [x] [AGC022E] Median Replace

    2.8计数类DP

    • [x] [AGC024F] Simple Subsequence Problem
    • [x] [USACO19DEC]Tree Depth P

    2.9组件DP

    • [ ] 摩天大楼

    2.10杂题

    • [ ] 某位歌姬的故事

    三、矩阵加速图上问题

    系统学习用博客 广义矩阵乘法

    3.1简单路径计数

    • [x] [HNOI2002]公交车路线
    • [x] [TJOI2017]可乐

    给定邻接矩阵(mathcal A)(mathcal A)(k)次幂代表每个点经过(k)条边(边权为1)到达点的方案数。

    上面两道题都是直接询问经过(k)条边到达某个点的方案数,直接做即可。

    3.2广义矩阵乘法&优化Floyd

    • [x] [GZOI2017]河神

    • [x] [USACO07NOV]Cow Relays G

    • [x] [NOI Online #1 入门组]魔法

    • [x] [POI2010]CHO-Hamsters

    (otimes)运算满足交换律、结合律,且(otimes)(oplus)存在分配律,即存在(left(igoplus a ight)otimes b = igoplus left( aotimes b ight)) 时,广义矩阵乘法满足结合律。

    有了广义矩阵乘法,我们就可以对各类二元运算进行快速幂运算,其中最典型的应用是用来优化Floyd。

    需要注意的是,与(mathtt{3.1})不同,我们现在需要将边权放进矩阵里参与运算。

    3.3处理技巧

    3.3.1拆点

    • [x] [SCOI2009] 迷路

    如果边有边权,我们可以考虑拆点,将每个点依据出边的边权不同拆成不同状态的点,不同状态的点之间由对应边权小的向边权大的连边。

    3.3.2点边互换

    • [x] [SDOI2009]HH去散步

    这道题不能立刻走回头路。

    我们把所有有向边看做点(无向边转两条有向边),并连出一些边。两条边代表的点连起来,当且仅当一条边的终点为另一条边的起点。这样经过连边之后会形成一个有向图。(s)(t)的路径长度为在这张图上表现为:射出的边在图中的所有结点到射向的所有边在图中的所有结点之间的路径长度为(k-1)。(引用自博客)

    我们只需要把一条边代表的两个点之间的点去掉就可以保证不走回头了。

    3.3.3周期分组快速幂

    • [x] [ZJOI2005]沼泽鳄鱼
    • [x] P3821 Isaac

    对于不同时刻矩阵(mathcal A)的状态不同但是有周期性时,我们可以令(mathcal{T}=prod{mathcal{A_i}}),我们对矩阵(mathcal{T})做快速幂,对于余数暴力处理即可。

    3.3.4倍增预处理,按时间顺序统计

    • [x] [NOI Online #3 提高组]魔法值

    当一道题目需要多次询问时,如果我们对于每个询问都用(O(n^3log T))的时间处理的话是一个不小的开销。

    观察到我们需要的值通常只有矩阵的第一行,我们可以倍增预处理出各个时刻矩阵第一行的值,这样每个询问我们都可用(O(n^2log T))的时间处理(因为参与相乘的答案矩阵只有1行,省掉了一维)。

    3.3.5bitset优化

    • [x] CF576D Flights for Regular Customers

    如果我们最终只需要知道矩阵中某个元素是否为(0),而不关心它矩阵的值,我们可以用bitset进行优化,使得单次矩阵乘法的复杂度优化为(O(frac{n^3}{w}))

    3.4综合应用

    • [x] [NOI2020]美食家

    有了系统的学习,这道题的思路就很清晰了:拆点+广义矩阵乘法+倍增预处理,按时间顺序统计。

    要是没学过直接上场的话,估计就直接跪了。。。

    四、虚树

    • [x] [SDOI2011]消耗战
    • [x] [CF613D]Kingdom and its Cities
    • [x] [HEOI2014]大工程
    • [x] [HNOI2014]世界树
    • [x] [BZOJ3879]SvT
  • 相关阅读:
    归并排序的java实现
    Hanoi问题java解法
    j2ee之Filter使用实例(页面跳转)
    java工具类之Graphics
    java程序设计之循环链表
    Java程序设计求出岁数
    Java程序设计之链表结构
    CENTOS 6 通过YUM升级GCC到4.7/4.8
    Object c的NSString的使用,创建,拼接和分隔,子string,substring
    Let’s Encrypt 最近很火的免费SSL 使用教程
  • 原文地址:https://www.cnblogs.com/Robert-JYH/p/14802876.html
Copyright © 2020-2023  润新知