Python Kruskal 5个RE,求改
查看原帖
Python Kruskal 5个RE,求改
1077867
SwordRain楼主2024/1/20 22:05

代码如下

import sys, heapq
input = lambda: sys.stdin.readline().strip()
def find(x, s):
    if x != s[x]:
        s[x] = find(s[x], s)
    return s[x]
def merge(x, y, s):
    x = find(x, s)
    y = find(y, s)
    if x != y:
        s[x] = s[y]
def kruskal(edges, s, n):
    ans = 0
    i = 0
    while i < n - 1 and edges:
        weight, start, end = heapq.heappop(edges)
        if find(start, s) != find(end, s):
            merge(start, end, s)
            ans += weight
            i += 1
    print(ans)
n = int(input())
s = [i for i in range(n + 1)]
edges = []
numbers = [None]
for i in range(1, 1 + n):
    numbers.extend(list(map(int, input().split())))
for i in range(1, n * n + 1):
    x = (i - 1) // n + 1
    y = (i - 1) % n + 1
    heapq.heappush(edges, (numbers[i], x, y))
kruskal(edges, s, n)

实在是不知道怎么就RE了!!!

2024/1/20 22:05
加载中...