简单图论+二分搜索:环境治理

这篇具有很好参考价值的文章主要介绍了简单图论+二分搜索:环境治理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

LQ 国拥有 n 个城市, 从 0 到 n−1 编号, 这 n 个城市两两之间都有且仅有 一条双向道路连接, 这意味着任意两个城市之间都是可达的。每条道路都有一 个属性 D, 表示这条道路的灰尘度。当从一个城市 A 前往另一个城市 B 时, 可 能存在多条路线, 每条路线的灰尘度定义为这条路线所经过的所有道路的灰尘 度之和, LQ 国的人都很讨厌灰尘, 所以他们总会优先选择灰尘度最小的路线。
LQ 国很看重居民的出行环境, 他们用一个指标 P 来衡量 LQ 国的出行环 境, PP定义为:
简单图论+二分搜索:环境治理
其中 d(i, j)d(i,j) 表示城市 ii 到城市 jj 之间灰尘度最小的路线对应的灰尘度的值。 为了改善出行环境, 每个城市都要有所作为, 当某个城市进行道路改善时, 会将与这个城市直接相连的所有道路的灰尘度都减少 1 , 但每条道路都有一个 灰尘度的下限值 LL, 当灰尘度达到道路的下限值时, 无论再怎么改善, 道路的 灰尘度也不会再减小了。

具体的计划是这样的:

第 1 天, 0 号城市对与其直接相连的道路环境进行改善;

第 2 天, 1 号城市对与其直接相连的道路环境进行改善;

⋯ \cdots
第 n天, n-1 号城市对与其直接相连的道路环境进行改善;

第 n+1 天, 0 号城市对与其直接相连的道路环境进行改善;

第 n+2天, 1 号城市对与其直接相连的道路环境进行改善;

LQ 国想要使得 PP 指标满足 P ≤ Q P \leq Q PQ 。请问最少要经过多少天之后, P 指标 可以满足 P ≤ Q P \leq Q PQ。如果在初始时就已经满足条件, 则输出 0 ; 如果永远不可能 满足, 则输出 -1 。

解题思路

二分搜索+Floyd算法
对于P的定义已经给出很明显的提示了——多源最短路径,用Floyd,
灰尘度的变化是一个动态变化,而Floyd得到的最短路径抽象去了路径上的点,那样就不知道哪条最短路径会缩短了。
分析题意:
1)天数越多,就越可能达标
2)本题要求的是最少需要多少天
得出结论二分搜索

解题思路:二分搜索天数,用Floyd判断这天的灰尘度是否达标
注意点:
1、二分的上界文章来源地址https://www.toymoban.com/news/detail-506486.html

AC_Code

# -*- coding: utf-8 -*-
# @Author : BYW-yuwei
# @Software: python3.8.6
ans = float('inf')
edge = [0 for _ in range(105)]
min_edge = [0 for _ in range(105)]
dis = [[0 for _ in range(105)] for _ in range(105)]
down = [0 for _ in range(105)]
n,q = map(int,input().split())
for i in range(n):
    edge[i] = list(map(int,input().split()))
for i in range(n):
    min_edge[i] = list(map(int,input().split()))

def check(day):
    p=0
    op = day%n
    for i in range(n):
      if i<op:
        down[i] = day//n + 1
      else:
        down[i] = day//n
    for i in range(n):
        for j in range(n):
            dis[i][j] = max(edge[i][j] - down[i] - down[j],min_edge[i][j])
    for k in range(n):
        for i in range(n):
            for j in range(n):
                dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j])
    for i in range(n):
        for j in range(n):
            p += dis[i][j]
    if p <=q:
        return True
    else:
        return False
l=0
r=int(5e7)
while l<r:
    mid = (l+r)//2
    if check(mid):
        ans = min(ans,mid)
        r=mid
    else:
        l = mid +1
if l==int(5e7):
    print(-1)
else:
    print(ans)

到了这里,关于简单图论+二分搜索:环境治理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年天府杯全国大学生数学建模竞赛B题中国环境问题的治理解题全过程

       问题背景:    随着经济的快速发展和人口的持续增长,中国的环境问题已经成为了一个急需解决的重要问题。这些环境问题不仅对人们的健康和生活质量产生了巨大的影响,还对生态系统和生态平衡造成了极大的破坏。近年来,中国政府积极推动环保事业的发展,通

    2024年02月08日
    浏览(47)
  • 搜索与图论:染色法判定二分图

    将所有点分成两个集合,使得所有边只出现在集合之间,就是二分图 二分图:一定不含有奇数个点数的环;可能包含长度为偶数的环, 不一定是连通图 染色可以使用1和2区分不同颜色,用0表示未染色 遍历所有点,每次将未染色的点进行dfs, 默认染成1或者2 由于某个点染色成

    2024年02月08日
    浏览(35)
  • 【算法基础:搜索与图论】3.6 二分图(染色法判定二分图&匈牙利算法)

    https://oi-wiki.org/graph/bi-graph/ 二分图是图论中的一个概念, 它的所有节点可以被分为两个独立的集合,每个边的两个端点分别来自这两个不同的集合 。 换句话说, 二分图中不存在连接同一集合内两个节点的边 。 如何判断一个图是二分图? 当且仅当图中不含奇数环 。(奇数

    2024年02月16日
    浏览(42)
  • 第三章 搜索与图论(三)——最小生成树与二分图

    最小生成树针对无向图,有向图不会用到 Prim 求解稠密图的最小生成树 和Dijkstra的思想相似,两者都是基于贪心 区别在于Dijkstra求单源最短路,而Prim求最小生成树 最小生成树:用最少的边连通图中所有的点,使得这些边的权值和也最小 Prim中的 dis数组 含义:点到 集合 的最

    2024年02月13日
    浏览(52)
  • 算法基础复盘笔记Day07【搜索与图论】—— Prim、Kruskal、染色体判定二分图、匈牙利算法

    ❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于 Java后端开发 ,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得 关注 、 点赞 、 收藏 、 评论 ⭐️⭐️⭐️ 📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉 1. 题目

    2024年02月02日
    浏览(47)
  • 【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴 们点赞、关注! class   Solution :      def   mySqrt ( self ,  x :   int )   -   int :       

    2024年02月04日
    浏览(63)
  • 【图论】二分图

    二分图,即可以将图中的所有顶点分层两个点集,每个点集内部没有边 判定图为二分图的充要条件:有向连通图不含奇数环 可以解决二分图判断的问题 步骤与基本思路 遍历图中每一个点,若该点未被染色,则遍历该点所相邻的点,相邻的点中未被染色的进行染色操作,已被

    2024年02月16日
    浏览(26)
  • 最短路+二分题目整理

    题目链接 (qquad) 题目要求 最小化最大 费用,显然是使用二分答案,二分答案首先应该看 限制 和 目标 ,此处的限制是血量限制,而目标是费用目标。这种情况我们可以二分费用,然后在图上跑最短路判定血量是否满足。 (qquad) 对于 check 函数,我们去判定是否存在一条道

    2024年02月01日
    浏览(40)
  • [图论第三节]最小生成树/二分图

    Prim算法 朴素版Prim O(n^2) 稠密图 步骤: S:表示最小生成树的集合 初始化距离 找距离集合S最近的节点 将节点加入集合S 用该节点更新非S点到集合S点的距离 代码: 堆优化版Prim O(mlogn) 用堆优化找最短距离的过程将O(n)--O(1) Kruskal算法 O(mlogm) 稀疏图 步骤: 将所有边的权值从小

    2024年02月14日
    浏览(36)
  • 刷题笔记26——图论二分图判定

    世界上的事情,最忌讳的就是个十全十美,你看那天上的月亮,一旦圆满了,马上就要亏厌;树上的果子,一旦熟透了,马上就要坠落。凡事总要稍留欠缺,才能持恒。 ——莫言 visited数组是在如果有环的情况下,防止在图中一直绕圈设置的,类似于剪枝操作,走过了就没必要再走一遍

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包