zoukankan      html  css  js  c++  java
  • hdu6331 Walking Plan

    题意:

    sol:
    考虑floyed
    直接暴力做的话复杂度是k×n^3会炸。
    考虑一个比较神仙的分块做法。
    注意到我们是可以直接求单独某个k的矩阵,使用矩阵快速幂即可(取min的矩阵乘法)。
    单独求一次的复杂度是O(n^3logk)。
    设块的长度为100。
    对k/100的分块边界求一下它们的矩阵。
    这些矩阵称为a矩阵。
    再求出前100个矩阵,这个直接floyed即可。
    然后对他们搞一个后缀min,也就是说第k个矩阵代表了至少走k条边的最短路矩阵。
    这些矩阵称为b矩阵。
    那么回答的询问的时候设询问q=100x+y。
    此时需要做的只是合并第x个a矩阵和第y个b矩阵即可。
    由于只关注s-t的最短路,因此复杂度只有n。
    综上复杂度O(100×n^3logk+qn)。

  • 相关阅读:
    python主要探索函数
    数据分析分析方法
    监控hadoop任务结果shell脚本
    shell编程
    hadoop介绍
    数据探索
    Python数据分析简介
    数据挖掘基础篇之整体思路
    sqlAlchemy
    python md5 加密
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/10344639.html
Copyright © 2011-2022 走看看