日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2039. 网络空闲的时刻(BFS)

發布時間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2039. 网络空闲的时刻(BFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個有 n 個服務器的計算機網絡,服務器編號為 0 到 n - 1 。
同時給你一個二維整數數組 edges ,其中 edges[i] = [ui, vi] 表示服務器 ui 和 vi 之間有一條信息線路,在 一秒 內它們之間可以傳輸 任意 數目的信息。
再給你一個長度為 n 且下標從 0 開始的整數數組 patience 。

題目保證所有服務器都是 相通 的,也就是說一個信息從任意服務器出發,都可以通過這些信息線路直接或間接地到達任何其他服務器。

編號為 0 的服務器是 服務器,其他服務器為 數據 服務器。
每個數據服務器都要向主服務器發送信息,并等待回復。
信息在服務器之間按 最優 線路傳輸,也就是說每個信息都會以 最少時間 到達主服務器。
主服務器會處理 所有 新到達的信息并 立即 按照每條信息來時的路線 反方向 發送回復信息。

在 0 秒的開始,所有數據服務器都會發送各自需要處理的信息。
從第 1 秒開始,每 一秒最 開始 時,每個數據服務器都會檢查它是否收到了主服務器的回復信息(包括新發出信息的回復信息):

  • 如果還沒收到任何回復信息,那么該服務器會周期性 重發 信息。
    數據服務器 i 每 patience[i] 秒都會重發一條信息,也就是說,數據服務器 i 在上一次發送信息給主服務器后的 patience[i] 秒 后 會重發一條信息給主服務器。
  • 否則,該數據服務器 不會重發 信息。
    當沒有任何信息在線路上傳輸或者到達某服務器時,該計算機網絡變為 空閑 狀態。

請返回計算機網絡變為 空閑 狀態的 最早秒數

示例 1:

輸入:edges = [[0,1],[1,2]], patience = [0,2,1] 輸出:8 解釋: 0 秒最開始時, - 數據服務器 1 給主服務器發出信息(用 1A 表示)。 - 數據服務器 2 給主服務器發出信息(用 2A 表示)。1 秒時, - 信息 1A 到達主服務器,主服務器立刻處理信息 1A 并發出 1A 的回復信息。 - 數據服務器 1 還沒收到任何回復。距離上次發出信息過去了 1 秒(1 < patience[1] = 2),所以不會重發信息。 - 數據服務器 2 還沒收到任何回復。距離上次發出信息過去了 1 秒(1 == patience[2] = 1),所以它重發一條信息(用 2B 表示)。2 秒時, - 回復信息 1A 到達服務器 1 ,服務器 1 不會再重發信息。 - 信息 2A 到達主服務器,主服務器立刻處理信息 2A 并發出 2A 的回復信息。 - 服務器 2 重發一條信息(用 2C 表示)。 ... 4 秒時, - 回復信息 2A 到達服務器 2 ,服務器 2 不會再重發信息。 ... 7 秒時,回復信息 2D 到達服務器 2 。從第 8 秒開始,不再有任何信息在服務器之間傳輸,也不再有信息到達服務器。 所以第 8 秒是網絡變空閑的最早時刻。

示例 2:

輸入:edges = [[0,1],[0,2],[1,2]], patience = [0,10,10] 輸出:3 解釋:數據服務器 122 秒初收到回復信息。 從第 3 秒開始,網絡變空閑。提示: n == patience.length 2 <= n <= 10^5 patience[0] == 0 對于 1 <= i < n ,滿足 1 <= patience[i] <= 10^5 1 <= edges.length <= min(10^5, n * (n - 1) / 2) edges[i].length == 2 0 <= ui, vi < n ui != vi 不會有重邊。 每個服務器都直接或間接與別的服務器相連。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/the-time-when-the-network-becomes-idle
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 廣度優先搜索求解最短的距離,然后計算最后一個能發出去的信息的時間 + 最短距離*2+1 的傳遞時間
class Solution { public:int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience) {int n = patience.size();vector<vector<int>> g(n);for(auto& e : edges) // 建圖{g[e[0]].push_back(e[1]);g[e[1]].push_back(e[0]);}queue<int> q;vector<bool> vis(n, false);vector<int> dis(n);q.push(0);vis[0] = true;int step = 0;while(!q.empty()) // BFS {int size = q.size();while(size--){int x = q.front();dis[x] = step;q.pop();for(auto nx : g[x]){if(!vis[nx]){q.push(nx);vis[nx] = true;}}}step++;}int t = 0;for(int i = 1; i < n; ++i) // 求解最后一個信息的開始時間 + 傳遞時間,所有的取最大{t = max(t, dis[i]*2+1+(dis[i]*2-1)/patience[i]*patience[i]); }return t;} };

476 ms 184.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 2039. 网络空闲的时刻(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。