E卷-电脑病毒感染(200分)

刷题笔记合集🔗

电脑病毒感染

问题描述

K小姐是一家公司的网络管理员,最近她发现公司内部的局域网出现了电脑病毒。经过调查,K小姐了解到病毒是从某一台电脑开始传播的,通过电脑之间的网络连接,病毒会感染其他电脑。

公司内部一共有 台电脑,编号从 。电脑之间存在 条网络连接,每条连接由三个整数 表示,意味着电脑 和电脑 之间存在网络连接,如果电脑 感染了病毒,那么经过时间 后,电脑 也会被感染。

现在,K小姐知道最开始病毒是从编号为 的电脑开始传播的。她想知道,最少需要多长时间,病毒才能感染所有的电脑。如果无法感染所有电脑,则输出

输入格式

第一行包含两个整数 ,表示电脑数量和网络连接数量。

接下来 行,每行包含三个整数 ,表示电脑 和电脑 之间的网络连接以及传播时间

最后一行包含一个整数 ,表示最初感染病毒的电脑编号。

输出格式

输出一个整数,表示病毒传播到所有电脑所需的最短时间。如果无法感染所有电脑,则输出

样例输入

4
3
2 1 1
2 3 1
3 4 1
2

样例输出

2

数据范围

题解

本题可以使用 Dijkstra 算法求解最短路径问题。从初始感染病毒的电脑出发,将其到其他所有电脑的最短感染时间求出来,然后取其中的最大值即可。

  • 初始化距离数组 ,将初始感染电脑的距离设为 ,其他电脑的距离设为正无穷。
  • 使用优先队列进行 Dijkstra 算法,每次取出距离最小的电脑,更新其相邻电脑的距离。
  • 遍历所有电脑,找出最大的距离值,即为最短感染时间。如果存在无穷大的距离,说明无法感染所有电脑,返回

时间复杂度为 ,空间复杂度为

参考代码

  • Python
import heapq

N = 210
INF = 0x3f3f3f3f

if __name__ == "__main__":
    n = int(input())
    m = int(input())
    edges = [[] for _ in range(N)]
    dist = [INF] * N

    for _ in range(m):
        a, b, w = map(int, input().split())
        edges[a].append((b, w))

    start = int(input())
    dist[start] = 0

    pq = [(0, start)]
    while pq:
        d, u = heapq.heappop(pq)
        if d > dist[u]:
            continue
        for v, w in edges[u]:
            if dist[v] > dist[u] + w:
                dist[v] = dist[u] + w
                heapq.heappush(pq, (dist[v], v))

    res = max(dist[1:n+1])
    print(res if res < INF else -1)
  • Java
import java.util.*;

public class Main {
    static int N = 210;
    static int INF = 0x3f3f3f3f;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextIn

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务