LeetCode 2039 网络空闲的时刻[bfs 数学] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 2039 网络空闲的时刻[bfs 数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。




解题思路:
一道变形的广度优先题目,本质上还是使用BFS的模板,只不过需要对题目进行分析,对于每个访问到的点,分别讨论其未到重发时间的情况和已经重发过的情况,所需时间都可以用该式表示patience[next] * ((2 * dis - 1) / patience[next]) + 2 * dis + 1,广度优先遍历直到队列为0,获取最大的time即可,代码如下:

class Solution 
public:
    int networkBecomesIdle(vector<vector<int>>& edges, vector<int>& patience) 
        int n = patience.size();
        vector<vector<int>> adj(n);
        // 初始化距离矩阵
        for(auto& edge : edges) 
            adj[edge[0]].push_back(edge[1]);
            adj[edge[1]].push_back(edge[0]);
        
        vector<bool> visited(n, false);
        queue<int> q;
        q.push(0);
        visited[0] = true;
        int ans = 0;
        int dis = 1;
        while(!q.empty()) 
            int size = q.size();
            for(int i = 0; i < size; i ++) 
                int node = q.front();
                q.pop();
                for(auto& next : adj[node]) 
                    if(visited[next]) continue;
                    int time = patience[next] * ((2 * dis - 1) / patience[next]) + 2 * dis + 1;
                    ans = max(ans, time);
                    q.push(next);
                    visited[next] = true;
                
            
            dis ++;
        
        return ans;
    
;

以上是关于LeetCode 2039 网络空闲的时刻[bfs 数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 2039 [2009国家集训队]employ人员雇佣 网络流

2039 骑马修栅栏

LeetCode 297. 二叉树的序列化与反序列化(bfs,二叉树,Java)

BFS问题-LeetCode 55455297127433434(BFS)

lyk

Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)