[leetcode] 2039. 网络空闲的时刻

2023-11-14

题目链接
在这里插入图片描述
题意:
给定一张n个点不含重边的无向图,点的编号从0开始到n-1,两点之间如果有连边,可以认为耗时为1秒
1->n-1的点都需要向0号点发送消息(从第0秒开始)
在0号收到消息之后,会回复消息;
从第一秒开始,如果1->n-1号服务器经过patiennce[]时间都还没有收到回复的消息,那么就会重新发送请求的消息
问最早的网络中没有消息传输的时间是什么时候

思路:
最早的没有消息传输的时间为所有点空闲的时间中最晚的那个时间节点
bfs
设一个点u到0号点的距离为dis,并且经过t秒后会重新发送消息,那么说:
{
从发送到回复消息所需要消耗的时间为dis * 2

  1. d i s ∗ 2 ≤ t dis * 2 \leq t dis2t,在这种情况下,还没有重新发送消息就已经得到了回复,这个点的空闲时间为dis*2+1
  2. d i s ∗ 2 > t dis * 2 > t dis2>t,在这种情况下,没有收到消息并且再次发送请求,在dis2-1时间内,发送请求的次数为cnt = (dis2-1) / t,那么说我们可以得到最后一次发送消息的时候是 t ∗ c n t t * cnt tcnt,并且会在 l a s t R e p l y = t ∗ c n t + d i s ∗ 2 lastReply = t*cnt + dis*2 lastReply=tcnt+dis2的时候收到最后一次的回复,那么这个点的空闲时间为 l a s t R e p l y + 1 lastReply+1 lastReply+1
    }
    第一种情况中, c n t = 0 cnt = 0 cnt=0,所以说可以合并为同一个式子

Code:

class Solution {
public:
    int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience) {
        int n = patience.size();
        vector<vector<int>> edg(n);
        vector<bool> vis(n,false);
        queue<int> que;
        for(vector<int> vt:edges) {
            int u = vt[0],v = vt[1];
            edg[u].push_back(v);
            edg[v].push_back(u);
        }
        que.push(0);
        vis[0] = 1;
        int ans = 0, dist = 1;
        int siz = que.size();
        while(que.size()) {
            int frt = que.front();
            que.pop();
            for(int u:edg[frt]) {
                if(vis[u]) continue;
                vis[u] = 1;
                que.push(u);
                int t = patience[u] * ((2 * dist - 1) / patience[u]) + 2 * dist + 1;
                ans = max(ans, t);
            }
            if(siz) siz --;
            if(siz == 0) {
                dist ++;
                siz = que.size();
            }
        }
        return ans;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[leetcode] 2039. 网络空闲的时刻 的相关文章

  • 【进制转换】二进制,十进制,八进制,16进制

    1 二进制与十进制相互转换 二进制转为十进制 0000 0110转换为10进制 二进制里面没有 个位 十位 百位 只能通过从左到右或者从右到左第几位来描述 从右往左开始 第一位是0 进制的基数是2 那么就是0 20 第二位是1 就是1 21
  • 如何实现数据可视化分析?有这个解决方案就够了

    在这个数据呈爆炸式增长的时代 每天都有海量数据在产生 如何通过简单的方式实现业务上的分析 计算 交互 并最终呈现出可视化的分析结果 帮助业务人员更好地理解数据的价值 将数据变现 是当前众多企业都需要面对的问题 想要直观准确地从不同领域中的数
  • XGBOOST算法Python实现(保姆级)

    摘要 XGBoost算法 eXtreme Gradient Boosting 在目前的Kaggle 数学建模和大数据应用等竞赛中非常流行 本文将会从XGBOOST算法原理 Python实现 敏感性分析和实际应用进行详细说明 目录 0 绪论

随机推荐

  • sqlite3加密支持

    sqlite3加密支持 sqlite3免费版并不支持加密 不过留有接口 有不少开源的加密实现 不过有的需要使用openssl配置略显繁琐 不过使用wxsqlite比较方便 wxSqlite3 wxSqlite3是wxWidgets的扩展组件
  • 声笔飞码超字模式效率分析

    声笔飞码超字模式效率分析 2 keys 672 items 405280396 00 times covering 72 48 2 keys 672 items 405280396 00 times covering 72 48 3 key
  • SVM(2)从原始问题到对偶问题的转换

    S VM的水真是太深了 只能一点一点的解决了 今天这篇博客简单讲解SVM的目标函数从原始问题到对偶问题的转换 在这里再给大家一个大牛的博客链接 http blog pluskid org p 685 1 转化对偶问题 上篇博客中我们得到的目
  • 计算机无法访问指定设备路径或文件怎么回事,window无法访问指定设备 路径或文件是怎么回事...

    近日许多用户在咨询小编说自己的电脑在打开某些程序的时候 就出现提示window无法访问指定设备 路径或文件 从而导致程序的无法正常运行 许多用户对此也都不知该从而下手 非常烦恼 那么window无法访问指定设备 路径或文件怎么解决呢 下面小
  • UGUI内核大探究(九)Image与RawImage

    Image组件是UGUI里最常用的组件 可能没有之一 我们知道其实还有一个RawImage组件 那么二者的区别是什么呢 之前的文章UGUI内核大探究 八 MaskableGraphic中我们提到过 二者 连同Text 都继承自Maskabl
  • ES的java接口调用异常信息:java.lang.RuntimeException: Request cannot be executed; I/O reactor status: STOPPED

    我的处理方法是重启了连接ES的服务接口 我专门写的一个供APP调用的服务 这个服务去连接ES 出现了这个错误 估计还是客户端连ES的出了问题
  • 【蓝桥杯】带分数

    题目 100可以表示为带分数的形式 100 3 69258 714 还可以表示为 100 82 3546 197 注意特征 带分数中 数字 1 9 分别出现且只出现一次 不包含 0 类似这样的带分数 100 有 11 种表示法 输入格式 一
  • 一起学Vue3源码,实现最简Vue3【07】 - 实现 isReactive 和 isReadonly

    实现 isReactive 和 isReadonly 什么是isReactive isReadonly 即判断一个对象是否是reactive或者readonly reactive spec ts import isReactive reac
  • 关于模板类重载流operator<<

    关于模板类重载流operator lt lt template
  • 机器学习之逻辑回归算法笔记

    逻辑回归是一种用于解决分类问题的机器学习方法 它是一种基于概率思想的预测分析技术 分类算法 Logistic 回归用于预测分类因变量的似然性 逻辑回归中的因变量是二进制变量 数据编码为 1 是 真 正常 成功等 或 0 否 假 异常 失败等
  • C++ 类的构建,继承,派生上的小细节

    自己从C过渡到学C 的时候 对于面向过程和面向对象两种编程思想一直模模糊糊分不清楚 所以花了很大的功夫 侧面说明我可能不适合编程 为了提醒 也是为了做一点小总结 特意总结了一些学习的时候发现的易错点 一 类在声明的时候 必须要写清priva
  • UCOS-III 互斥量

    互斥量 一 互斥量基本概念 二 互斥量优先级继承机制 三 互斥量应用场景 四 互斥量运作机制 五 互斥量创建流程 1 定义互斥量 2 创建互斥量 六 互斥量接口函数 1 创建互斥量函数OSMutexCreate 2 删除互斥量函数 OSMu
  • VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tupl

    VisibleDeprecationWarning Creating an ndarray from ragged nested sequences which is a list or tuple of lists or tuples o
  • VS2015创建C语言工程

    http blog csdn net hao134838 article details 53142442 foxhandler RssReadRenderProcessHandler 引言 之前我们在完成C语言工程的时候都是在VC 6 0
  • 【数字音频】采样率、声道与采样深度

    前言 最近因为项目需要 接触了一些简单的数字音频知识 内容来源于网络 百度百科及相关博客 这里做一个简单的记录 方便以后查阅 1 采样率 采样频率 也称为采样速度或者采样率 定义了每秒从连续信号中提取并组成离散信号的采样个数 它用赫兹 Hz
  • uni app 调用网络打印机_Taro 和 uni-app选型对比

    一 Taro和uni app的介绍 1 taro的介绍 taro是多端统一开发框架 支持用 React 的开发方式编写一次代码 生成能运行在微信 百度 支付宝 字节跳动小程序 H5 React Native 等的应用 2 uni app的介
  • 修改Jar包源码(无需反编译工具)(文章看起来很长,其实方法超级简单!)

    前言 本文结合实际项目案例 介绍修改jar包源码的方式 其中运用了一些小技巧 正文 场景 在项目中用了第三方的jar包 但是jar包某个类的成员变量是private的 想将其改为public属性 以便为其赋值 源码中没有其提供简单的set方
  • 05_寄存器和RAM

    计算机的组成原理中 存储是必不可少的部分 可以用来存储计算的结果 图片 文字等等 本文将介绍存储是如何实现的 锁存器 首先我们来看一个门电路 当两个输入引脚都为0时 输出引脚也为0 如果A引脚输入1 输出为1 B引脚也会变为1 此时将A引脚
  • 指针:引领程序灵魂的精准指引

    指针 引领程序灵魂的精准指引 在计算机编程中 指针是一种强大而又常用的概念 它具备着引领和指引程序执行流程的作用 为我们开辟了更加广阔的编程世界 在本文中 我们将深入探讨指针的基本概念 使用方法和示例代码 帮助您更好地理解和运用指针 一 指
  • [leetcode] 2039. 网络空闲的时刻

    题目链接 题意 给定一张n个点不含重边的无向图 点的编号从0开始到n 1 两点之间如果有连边 可以认为耗时为1秒 1 gt n 1的点都需要向0号点发送消息 从第0秒开始 在0号收到消息之后 会回复消息 从第一秒开始 如果1 gt n 1号