1140. 最短网络

摘要
Title: 1140. 最短网络
Tag: kruskal、最小生成树
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

1140. 最短网络

  • 题意

    农夫约翰被选为他们镇的镇长!
    他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。
    约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。
    约翰的农场的编号是1,其他农场的编号是 2∼n。
    为了使花费最少,他希望用于连接所有的农场的光纤总长度尽可能短。
    你将得到一份各农场之间连接距离的列表,你必须找出能连接所有农场并使所用光纤最短的方案。

  • 思路

    Kruskal板子题

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    '''
    Author: NEFU AB-IN
    Date: 2022-03-03 20:43:36
    FilePath: \ACM\Acwing\1140.py
    LastEditTime: 2022-03-03 20:43:37
    '''
    N = 110


    class Edge():
    def __init__(self, u, v, w):
    self.u = u
    self.v = v
    self.w = w

    def __lt__(self, t):
    return self.w < t.w


    g = [[0] * N for _ in range(N)]
    fa = [i for i in range(N)]


    def find(x):
    if fa[x] != x:
    fa[x] = find(fa[x])
    return fa[x]


    n = int(input())
    for i in range(1, n + 1):
    g[i][1:] = map(int, input().split())
    lst = []
    for i in range(1, n + 1):
    for j in range(1, n + 1):
    lst.append(Edge(i, j, g[i][j]))

    lst.sort()
    res, cnt = 0, 0
    for i in range(len(lst)):
    u, v, w = lst[i].u, lst[i].v, lst[i].w
    u = find(u)
    v = find(v)
    if u != v:
    fa[u] = v
    cnt += 1
    res += w

    print(res)

使用搜索:谷歌必应百度