zoukankan      html  css  js  c++  java
  • USACO 2009 Dec cow toll paths 过路费-floyd

    这道题首先要明确一点,那就是当你从一个点走到自己时,也是需要花费这个点点权值的费用。这个点卡了我两次QWQ

    然后我比较喜欢分两步搞:

    首先,我们利用floyd的一个性质:就是在更新其他点之间的路线时要先引入一个点,而枚举是按编号

    再来看这道题,如果它不要求加点权,那么就是裸的floyd,所以这道题难点就在于如何确定一条路径上最大的点,这时就容易让人想到这道题有一个排序步骤,因为排完序后在每一位都可以确定它前面的点都比它大/小。

    好了,那么显然是在枚举的时候,如果我们把小的点先枚举,大的点后枚举,不就能保证之前更新的值都小于这个值(也就是说路径上的值最大为这个枚举点)了吗^_^

    所以

    考虑用f[i][j]来表示以i,j为两端的最短路,不过值得注意的是,这条路径上没有比i,j,k点权更大的点

    考虑用dp[i][j]来表示答案,也就是以i,j为两端,路径上比较大的点权+总边权

    所以转移方程就是:

    f[i][j]=min(f[i][j],f[i][k]+f[k][j]);

    dp[i][j]=min(dp[i][j],f[i][j]+max(a[i],a[j],a[k]);

    最后处理一下映射细节就好了

  • 相关阅读:
    美化滚动条
    js 格式转化
    vue 实现 前端生成随机验证码
    Vue.js CLI4 Vue.config.js标准配置
    在鼠标右键 新建 添加md文件
    节流和防抖
    关于IE 浏览器 GET 请求缓存问题
    VSCode 背景插件
    Java后台开发Tomcat添加https支持小程序开发过程
    InnoDB与MyISAM等存储引擎对比
  • 原文地址:https://www.cnblogs.com/blog-Dr-J/p/9377044.html
Copyright © 2011-2022 走看看