/ SeriousOJ /

Record Detail

Time Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 33ms 21.41 MiB
#2 Accepted 48ms 27.66 MiB
#3 Time Exceeded ≥2112ms ≥353.738 MiB
#4 Time Exceeded ≥2106ms ≥353.727 MiB

Code

#!/usr/bin/env python3
import sys
import math
import random
import os
from io import BytesIO, IOBase

FAST_IO_BUFSIZE = 8192


class FastIO(IOBase):
    newlines = 0

    def __init__(self, file):
        self._file = file
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None

    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()

    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, FAST_IO_BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()

    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)


class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")


sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
class Dsu:
    par = []
    sz = []
    num_sets = 0
    size = 0

    def __init__(self, n):
        self.par = [i for i in range(n)]
        self.sz = [1 for i in range(n)]
        self.num_sets = n
        self.size = n

    def reset(self, n):
        if n > self.size:
            self.par += [i for i in range(self.size, n)]
            self.sz += [1 for i in range(self.size, n)]
            self.size = n
        for i in range(n):
            self.par[i] = i
            self.sz[i] = 1
        self.num_sets = n

    def find(self, a):
        if self.par[a] == a:
            return a
        self.par[a] = self.find(self.par[a])
        return self.par[a]

    def union(self, a, b):
        a = self.find(a)
        b = self.find(b)
        if a == b:
            return
        if self.sz[a] < self.sz[b]:
            a, b = b, a
        self.par[b] = a
        self.sz[a] += self.sz[b]
        self.num_sets -= 1

# sys.setrecursionlimit(10**5)

class solution:
    lim = 2 * 10**5 + 5

    def __init__(self) -> None:
        pass

    def solve(self) -> None:
        self.solve_case()

    def solve_case(self) -> None:
        n, k = map(int, input().split())
        points = [list(map(int, input().split())) for _ in range(n)]
        edges = [(i, j, self.distance(points[i], points[j], k)) for i in range(n) for j in range(i+1, n)]
        edges.sort(key=lambda x: -x[2])
        dsu = Dsu(n)
        ans = 0
        for i, j, w in edges:
            if dsu.find(i) != dsu.find(j):
                dsu.union(i, j)
                ans += w
        print(ans)

    def distance(self, a, b, k):
        return sum([abs(a[i] - b[i]) for i in range(k)])

if __name__ == "__main__":
    solution().solve()

Information

Submit By
Type
Submission
Problem
P1097 KuZ the Maximum spanning tree (Easy Version)
Contest
LU Divisonal Contest Problem Testing Round
Language
PyPy 3 (Python 3.9.18 PyPy 7.3.15)
Submit At
2024-12-05 12:25:08
Judged At
2024-12-05 12:25:08
Judged By
Score
20
Total Time
≥2112ms
Peak Memory
≥353.738 MiB