【代码随想录算法训练营——Day57(Day56周日休息)】图论——53.寻宝

卡码网题目链接

https://kamacoder.com/problempage.php?pid=1053

题解

53.寻宝

本题是模板题, 代码是仿照题解里的c++代码写出来的. prim和kruskal都是.

代码

python 复制代码
#53.寻宝
#prim法
if __name__ == "__main__":
    v, e = map(int, input().split())
    graph = [[10001] * (v + 1) for _ in range(v + 1)]
    for _ in range(e):
        x, y, k = map(int, input().split())
        graph[x][y] = k
        graph[y][x] = k
    minDist = [10001] * (v + 1)
    isInTree = [False] * (v + 1)
    for i in range(1, v): # n - 1条边连接n个结点
        cur = -1
        minVal = float('inf')
        for j in range(1, v + 1):
            if isInTree[j] == False and minDist[j] < minVal:
                cur = j
                minVal = minDist[j]
        isInTree[cur] = True
        for j in range(1, v + 1):
            if isInTree[j] == False and graph[cur][j] < minDist[j]:
                minDist[j] = graph[cur][j]
    result = 0
    for i in range(2, v + 1):
        result += minDist[i]
    print(result)

#kruskal法
class Edge:
    def __init__(self, l, r, val):
        self.l = l
        self.r = r
        self.val = val

n = 10001
father = [-1] * n

def init():
    for i in range(n):
        father[i] = i
def find(u):
    if father[u] == u:
        return u
    else:
        father[u] = find(father[u])
        return father[u]
def isSame(u, v):
    u = find(u)
    v = find(v)
    return u == v
def join(u, v):
    u = find(u)
    v = find(v)
    if u == v:
        return
    father[v] = u

if __name__ == "__main__":
    v, e = map(int, input().split())
    result = 0
    edges = []
    for _ in range(e):
        v1, v2, val = map(int, input().split())
        edges.append(Edge(v1, v2, val))
    edges.sort(key = lambda x: x.val)
    init()
    for edge in edges:
        x = find(edge.l)
        y = find(edge.r)
        if x != y:
            result += edge.val
            join(x, y)
    print(result)
相关推荐
不知名XL2 分钟前
day50 单调栈
数据结构·算法·leetcode
@––––––17 分钟前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
xsyaaaan29 分钟前
代码随想录Day31动态规划:1049最后一块石头的重量II_494目标和_474一和零
算法·动态规划
Jay Kay1 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5561 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao2 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
茉莉玫瑰花茶2 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
cpp_25012 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25012 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
uesowys2 小时前
Apache Spark算法开发指导-Factorization machines classifier
人工智能·算法